用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脚本的10个技巧(8)
Oct 09 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 PHP
PHP生成短网址方法汇总
Jul 12 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
PHP实现唤起微信支付功能
Feb 18 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
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
smarty模板数学运算示例
2016/12/11 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python3实现转换Image图片格式
2018/06/21 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
Python代码注释规范代码实例解析
2020/08/14 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
2014年新生军训方案
2014/05/01 职场文书
职务任命书范本
2014/06/05 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
工厂无线对讲系统解决方案
2022/02/18 无线电
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle