4.与数据库的连接


Posted in PHP onOctober 09, 2006

4.据库连接 

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

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中。

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";

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";

}

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后调用该函数

// 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";

}

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";

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。

<? 

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;

}

}

?>

PHP 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
php实现图片压缩处理
Sep 09 PHP
详解使用php-cs-fixer格式化代码
Sep 16 PHP
利用PHP创建动态图像
Oct 09 #PHP
ip签名探针
Oct 09 #PHP
PHP默认安装产生系统漏洞
Oct 09 #PHP
把PHP安装为Apache DSO
Oct 09 #PHP
PHP4中实现动态代理
Oct 09 #PHP
phpmyadmin操作流程
Oct 09 #PHP
一个用于MySQL的PHP XML类
Oct 09 #PHP
You might like
建立动态的WML站点(一)
2006/10/09 PHP
php中处理模拟rewrite 效果
2006/12/09 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
php使用codebase生成随机数
2014/03/25 PHP
Chrome Web App开发小结
2014/09/04 PHP
php中spl_autoload详解
2014/10/17 PHP
php读取csc文件并输出
2015/05/21 PHP
php实现将Session写入数据库
2015/07/26 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
详解nodejs模板引擎制作
2017/06/14 NodeJs
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
JavaScript实现拖拽效果
2020/03/16 Javascript
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
如何基于Python实现数字类型转换
2020/02/07 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
python中的对数log函数表示及用法
2020/12/09 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
工程造价管理专业大专生求职信
2013/10/06 职场文书
2014年公司工作总结
2014/11/22 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
如何在C++中调用Python
2021/05/21 Python