用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 相关文章推荐
鸡肋的PHP单例模式应用详解
Jun 03 PHP
解析php类的注册与自动加载
Jul 05 PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
非常实用的php验证码类
May 15 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
laravel实现简单用户权限的示例代码
May 28 PHP
php和nginx交互实例讲解
Sep 24 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 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 header()函数语法及使用代码
2013/11/04 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
jquery 快速回到页首的方法
2013/12/05 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
python处理圆角图片、圆形图片的例子
2014/04/25 Python
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
django 读取图片到页面实例
2020/03/27 Python
Python如何将装饰器定义为类
2020/07/30 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
售后服务科岗位职责范文
2013/11/13 职场文书
教师实习自我鉴定
2013/12/18 职场文书
工程安全员岗位职责
2014/03/09 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
红色旅游心得体会
2014/09/03 职场文书
八年级英语教学计划
2015/01/23 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript