用PHP连接Oracle数据库


Posted in PHP onOctober 09, 2006

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

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

连接 

< ? if ($conn=Ora_Logon("user@TNSNAME","password")) 
{ echo "SUCCESS ! Connected to database\n"; 
}else 
{echo "Failed :-( Could not connect to database\n";} 
Ora_Logoff($conn); 
phpinfo(); 
?> 

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

查询 

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

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 - $conn \n"; 
echo "Opening cursor ... \n"; 
$cursor=ora_open($conn); printoraerr($cursor); 
echo "Opened cursor - $cursor \n"; 
$qry="select user,sysdate from dual"; 
echo "Parsing the query $qry ... \n"; 
ora_parse($cursor,$qry,0); printoraerr($cursor); 
echo "Query parsed \n"; 
echo "Executing cursor ... \n"; 
ora_exec($cursor); printoraerr($cursor); 
echo "Executed cursor \n"; 
echo "Fetching cursor ... \n"; 
while(ora_fetch($cursor)) 

$user=ora_getcolumn($cursor,0); printoraerr($cursor); 
$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor); 
echo " row = $user, $sysdate \n"; 

echo "Fetched all records \n"; 
echo "Closing cursor ... \n"; 
ora_close($cursor); 
echo "Closed cursor \n"; 
echo "Logging off from oracle... \n"; 
ora_logoff($conn); 
echo "Logged off from oracle \n"; 
?> 

显示结果

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

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)." 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 " \n"; 
for ($i=0;$i<$w_numcols;$i++) 

$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; 
echo "\t ".ora_columnname($cursor,$i)." \n"; 

echo " \n"; 
while(ora_fetch($cursor)) 

echo " \n"; 
for ($i=0;$i<$w_numcols;$i++) 

$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; 
if(ora_columntype($cursor,$i)=="LONG") 
echo " ". 
ora_getcolumn($cursor,$i)." \n"; 
else 
echo " ".ora_getcolumn($cursor,$i)." \n"; 
printoraerr($cursor,$conn); 

$numrows++; 
echo " \n"; 

if ($numrows==0) 
echo " Query returned no records \n"; 
else 

echo " \n"; 
echo " Count \n"; 
echo " $numrows \n"; 
echo " \n"; 

echo " \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); 
?> 

基于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 " 
You are not authorized to enter the site 
\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 " 
You are not authorised to enter the site 
\n"; 
exit; 
}} 
?> 

PHP 相关文章推荐
我的群发邮件程序
Oct 09 PHP
小偷PHP+Html+缓存
Dec 20 PHP
Zend Guard一些常见问题解答
Sep 11 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
php 文件上传实例代码
Apr 19 PHP
php PDO判断连接是否可用的实现方法
Apr 03 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 PHP
php实现映射操作实例详解
Oct 02 PHP
PHP面向对象编程快速入门
Oct 09 #PHP
PHP模拟SQL Server的两个日期处理函数
Oct 09 #PHP
PHP实现的功能是显示8条基色色带
Oct 09 #PHP
提升PHP执行速度全攻略(上)
Oct 09 #PHP
提升PHP执行速度全攻略(下)
Oct 09 #PHP
如何过滤高亮显示非法字符
Oct 09 #PHP
无限级别菜单的实现
Oct 09 #PHP
You might like
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
Python FFT合成波形的实例
2019/12/04 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
linux比较文件内容的命令是什么
2013/03/04 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
办理暂住证介绍信
2014/01/11 职场文书
大学学风建设方案
2014/05/04 职场文书
个性婚礼策划方案
2014/05/17 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书
计算机实训报告范文
2014/11/05 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
董事长秘书工作总结
2015/08/14 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python