网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > PHP > PHP入门安装 > 4.与数据库的连接  

4.与数据库的连接

2006-02-27  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏


4.据库连接 


通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。 网管有家bitscn.net

PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。

想获得更多有关在Microsoft Windows平台上安装支持PHP3的Apache服务器的知识以及更多有关Oracle数据库的知识,请查阅以下URL:www.csoft.net/~vsbabu/articles/oraphp.html。



4.1 连接



<? 

if ($conn=Ora_Logon(\\"user@TNSNAME\\",\\"password\\")) 

{

echo \\"<B>SUCCESS ! Connected to database<B>\n\\";



else 

{

echo \\"<B>Failed :-( Could not connect to database<B>\n\\";

}

Ora_Logoff($conn);

phpinfo();

?>

以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。 网管u家www.bitscn.net



4.2 查询



假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子:

<?

/*

* 连接数据库并执行查询

*/

function printoraerr($in_cur)

{

// 检查Oracle是否出错

// 如果存在错误则显示

// 当指针被激活时每次请求Oracle后调用该函数

if(ora_errorcode($in_cur))

echo \\"Oracle code - \\".ora_error($in_cur).\\"\n\\";

return;

}

/** 主程序 */

if (!($conn=ora_logon(\\"user@TNSNAME\\",\\"password\\"))) 

{

echo \\"Connection to database failed\n\\";

exit;

}

echo \\"Connected as connection - <b>$conn</b><br>\n\\"; 网管u家u.bitsCN.com

echo \\"Opening cursor ...<br>\n\\";

$cursor=ora_open($conn); printoraerr($cursor);

echo \\"Opened cursor - <b>$cursor</b><br>\n\\";

$qry=\\"select user,sysdate from dual\\";

echo \\"Parsing the query <b>$qry</b> ...<br>\n\\";

ora_parse($cursor,$qry,0); printoraerr($cursor);

echo \\"Query parsed <br>\n\\";

echo \\"Executing cursor ...<br>\n\\";

ora_exec($cursor); printoraerr($cursor);

echo \\"Executed cursor<br>\n\\";

echo \\"Fetching cursor ...<br>\n\\";

while(ora_fetch($cursor))

{

$user=ora_getcolumn($cursor,0); printoraerr($cursor);

$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor);

echo \\" row = <B>$user, $sysdate </B><br>\n\\"; 网管bitscn_com

}

echo \\"Fetched all records<br>\n\\";

echo \\"Closing cursor ...<br>\n\\";

ora_close($cursor);

echo \\"Closed cursor<br>\n\\";

echo \\"Logging off from oracle... <br>\n\\";

ora_logoff($conn);

echo \\"Logged off from oracle <br>\n\\";

?>

(译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分)



4.3 显示结果



以下代码演示了怎样查询数据库并将结果输出:

<?

function printoraerr($in_cur, $conn)

{

// 检查Oracle是否出错

// 如果存在错误则显示

// 当指针被激活时每次请求Oracle后调用该函数 网管朋友网www_bitscn_net

// If it encountered an error, we exit immediately

if(ora_errorcode($in_cur)) 

{

echo \\"Oracle code - \\".ora_error($in_cur).\\"<br>n\\";

ora_logoff($conn);

exit;

}

return;

}



function exequery($w_qry,$conn) 

{

$cursor=ora_open($conn); printoraerr($cursor,$conn);

ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn);

ora_exec($cursor); printoraerr($cursor,$conn);

$numrows=0;

$w_numcols=ora_numcols($cursor);

// 显示头部

echo \\"

<TABLE WIDTH=\\\"100%\\\" BORDER=\\\"0\\\" CELLSPACING=\\\"1\\\" 
CELLPADDING=\\\"2\\\">

<TR>\n\\";

for ($i=0;$i<$w_numcols;$i++)

{

$align=(ora_columntype($cursor,$i)==\\"NUMBER\\")?\\"RIGHT\\":\\"LEFT\\";

echo \\"\t<TH VALIGN=TOP ALIGN=$align>\\".ora_columnname($cursor,$i).\\"</TH>\n\\"; 网管u家u.bitscn@com

}

echo \\"</TR>\n\\";

while(ora_fetch($cursor))

{

echo \\"<TR>\n\\";

for ($i=0;$i<$w_numcols;$i++) 

{

$align=(ora_columntype($cursor,$i)==\\"NUMBER\\")?\\"RIGHT\\":\\"LEFT\\";

if(ora_columntype($cursor,$i)==\\"LONG\\")

echo \\"<TD VALIGN=TOP ALIGN=$align><PRE>\\".

ora_getcolumn($cursor,$i).\\"</PRE></TD>\n\\";

else

echo \\"<TD VALIGN=TOP ALIGN=$align>\\".ora_getcolumn($cursor,$i).\\"</TD>\n\\";

printoraerr($cursor,$conn);

}

$numrows++;

echo \\"</TR>\n\\";

}

if ($numrows==0)

echo \\"<TR><TD COLSPAN=\\\"$w_numcols\\\"><B>Query 
returned no records

</B></TD></TR>\n\\";

else 

{

echo \\"<TR>\n\\";

echo \\"<TH COLSPAN=\\\"\\".($w_numcols-1).\\"\\\" ALIGN=RIGHT>Count</TH>\n\\"; 网管联盟bitsCN_com

echo \\"<TH ALIGN=RIGHT>$numrows</TH>\n\\";

echo \\"</TR>\n\\";

}

echo \\"</TABLE>\n\\";

ora_close($cursor);

return;

}



// 主程序

if(!($conn=ora_logon(\\"user@SID\\",\\"password\\"))) 

{

echo \\"Error: Cannot connect to database\n\\";

exit;

}

$qry=\\"SELECT

deptno \\\"Dept\\\"

,empno \\\"Emp\\\"

,empnm \\\"Name\\\"

,salary \\\"Salary\\\"

FROM

employee

ORDER BY 1,2\\";

exequery($qry);

ora_logoff($conn);

?>

(译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分)



4.4 基于HTTP的Oracle登录



将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。
网管论坛bbs_bitsCN_com


<? 

if(!isset($PHP_AUTH_USER)) 

{

Header(\\"WWW-authenticate: basic realm=\\\"$SID\\\"\\");

Header(\\"HTTP/1.0 401 Unauthorized\\");

$title=\\"Login Instructions\\";

echo \\"<blockquote>

You are not authorized to enter the site

</blockquote> \n\\";

exit;



else 

{

if (!($conn=ora_logon(\\"$PHP_AUTH_USER@$SID\\",$PHP_AUTH_PW))) 

{

Header(\\"WWW-authenticate: basic realm=\\\"$SID\\\"\\");

Header(\\"HTTP/1.0 401 Unauthorized\\");

$title=\\"Login Instructions\\";

echo \\"<blockquote>

You are not authorised to enter the site

</blockquote> \n\\";

exit;

}

}

?>
TAGs   连接   数据库   echo   cursor   conn   Oracle   if   printoraerr      
 上一篇:3.从实例开始   下一篇:5.PHP的其他功能
4.与数据库的连接 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: