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 相关文章推荐
PHP中对缓冲区的控制实现代码
Sep 29 PHP
PHP文件大小格式化函数合集
Mar 10 PHP
php实现两个数组相加的方法
Feb 17 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
php的laravel框架快速集成微信登录的方法
Dec 12 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 PHP
PHP内存溢出优化代码详解
Feb 26 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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
php读取xml实例代码
2010/01/28 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python logging模块学习笔记
2014/05/24 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
历史学专业求职信
2014/06/19 职场文书
给老婆的道歉信
2015/01/20 职场文书
单位接收函范文
2015/01/30 职场文书
幼儿教师辞职信
2015/02/27 职场文书
数学教师求职信范文
2015/03/20 职场文书
社区活动总结范文
2015/05/07 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书