用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 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
PHP EOT定界符的使用详解
Sep 30 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
php 高性能书写
Dec 11 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
Jun 09 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
php下获取http状态的实现代码
May 09 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
PHP实现按之字形顺序打印二叉树的方法
Jan 16 PHP
PHP长连接实现与使用方法详解
Feb 11 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生成缩略图的类代码
2008/10/02 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
node后端服务保活的实现
2019/11/10 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
python实现简易内存监控
2018/06/21 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
python把转列表为集合的方法
2019/06/28 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
10张动图学会python循环与递归问题
2021/02/06 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
协议书的格式
2014/04/23 职场文书
作风转变心得体会
2014/09/02 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
新生儿未入户证明
2015/06/23 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
Python合并pdf文件的工具
2021/07/01 Python