说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

使用PHP来操作Oracle数据库 -PHP初学入门教程12

HTML文档下载 WORD文档下载 PDF文档下载
Oracle被大量在企业应用中采用,因此我们就利用Oracle来进一步介绍PHP与数据库的连接。

 

11. 数据库连接

 

  在上一节里,我们已经介绍了PHP与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。 

 

11.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中。
11.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 failedn";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数据库函数部分)
11.3 显示结果
以下代码演示了怎样查询数据库并将结果输出:
<?function printoraerr($in_cur, $conn){// 检查Oracle是否出错// 如果存在错误则显示// 当指针被激活时每次请求Oracle后调用该函数// If it encountered an error, we exit immediatelyif(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";elseecho "<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 databasen";exit;}$qry="SELECTdeptno "Dept",empno "Emp",empnm "Name",salary "Salary"FROMemployeeORDER BY 1,2";exequery($qry);ora_logoff($conn);?>
(译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分)
11.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;}}?> 

 

 

低功耗之争:英特尔 VS ARM NEIC-诺基亚体验创新中心 助力开发者创享新移动互联时代 Google地图主管Daniel Graf:新设计,新目标 浴火重生:OpenFeint创始人推开源平台OpenKit 紧随AWS数据仓库服务 Rackspace力鼎Cloudant 创业者谈:畏惧失败,但也要拥抱失败 谷歌赢得一场战斗 苹果能否赢得战争? 走进大学校园:是什么让学生成为独立开发者? 移动周报:为什么说独立开发者才是光明康途? MapFan eye:看日本地图导航应用的新玩法 数据会被清空:部分三星、魅族手机存安全漏洞 IE10简化文件访问 支持FileReader API 从MySQL迁移到MariaSQL Wikipedia力求开放 奥巴马筹款网站的制作过程 国内芯片厂商发力4G 新岸线2013年将推LTE方案 CMDN Club 23期:开放平台和O2O移动产品开发 花旗调低Apple股票评级 不信iPhone5会卖得好 2012年Linux Journal读者选择奖结果公布 百度云SiteApp:三步轻松创建移动网站 Twitter跨数据中心图片存储系统Blobstore解析 摩托罗拉携手中国移动发布Intel Inside智能机新锋丽i MT788 第五届“英特尔杯”全国大学生软件创新大赛圆满落幕 Appro推出液冷超级计算机 Dell:曾敦促微软WinRT放弃Windows品牌 IE10十大优点:渲染页面比Chrome快8% 法国电信:开放平台下的O2O移动产品怎么玩? 客如云创始人彭雷:寻找O2O“失落的半圆” 中国电信宋鹏飞:天翼开放平台的服务及架构解析 W3C小组宣布:HTML5标准制定完成 还记得DUQU吗?起因可能是Windows中存在了20多年的漏洞! API管理的五大规则 WIN2000和LINUX与PHP的搭配的困惑 求助ActiveReport! DBGrid 中字段显示问题,如果对应字段在数据库中是bit性,在用户界面显示时需要显示是“是”或“否”,请各位大侠指点一二,先谢那!! ★★★★如何打开.hxs文件★★★★ DBGrid 中字段显示问题,如果对应字段在数据库中是bit性,在用户界面显示时需要显示是“是”或“否”,请各位大侠指点一二,先谢那!! WIN2000和LINUX与PHP的搭配的困惑 继续帮忙!!! 菜鸟:使用adapter对dataset fill()时提示出错,不知道什么原因 入门问题 CString的find函数 哪位高手能解决Visual C++ Extensions for ADO之AddNew(&rs)的问题?(可惜无分可赠!!!) 在一个对话框中怎么得到另外一个对话框的某个控件的指针? 谁有delphi连接sql server的技术资料文章 谁有delphi6网络编程一书的代码???????????? 超级简单的问题!答了就给分!快快来! 谁有《delphi6网络编程》一书的原代码??????????? AMD xp cpu的性能是怎么样的 请大家帮忙,一个LPTCSTR的数据问题 散分,散分,高手在哪?新买的165上网卡无法拨号上网,救命,喔,救命 请问一个问题。 赛扬1.7G,256M内存打“传奇”有点卡!!!!!!!!帮我,快 如何 将数字字符串 转换为整数? 千万火急----如何把从组件中取的记录集在VB中赋给FPSpread控件? 探讨方法 有些不懂,请帮帮忙,有分。 大哥哥进来看看小妹这个问题好吗? socket高手请进!可以解决吗? java 的帮助文件哪儿可以找到? 很多页面都链接到同一页面,在返回时如何判断返回到原先的页面?(不用histroy.back())? jbuilder9中开发web services,import wsdl文件出错 很多页面都链接到同一页面,在返回时如何判断返回到原先的页面?(不用histroy.back()) 要调用某个DLL中函数,应如何申明? 有问题急? jb8中类找不到了??? 哪位可以告诉我在哪里可以改动网论坛首页上方的banner广告的路径? 救命啊!!为什么在DBASE4里执行“ALTER TABLE TableName ADD COLUMN AAA C(10)”发生异常?!,该语句不兼容啊! 如果当初你没遇到Java,你会选择什么 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 访问access数据库怎么不能查日期? Dll问题! 这个异常是什么回事? 小小问题。。。 為深麼我的Wizard模式的PreportyPage的OnWizardNext函數實現後,不能出現第二個頁面,how to. 那一个有的高程模拟试题 简单问题,请指点 在线等待求助:win2000缠人问题 ****郁闷,从来没有遇到这样的问题!!!为什么报表显示的时候会闪一下!而且显示出来后其窗体还没有自动关闭!******** 请大家发表一下自己的意见 问一个消息? 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 求助:chart使用Lineseries颜色问题 根据生活常识得出“谭晋玄”耳中有“小人”的原因.选自2011 ,耳中人是聊斋志异的一个故事 为什么谭晋玄耳中有小人 请根据生活常识判断“谭晋玄”耳中曾经有“小人”的原因 ( )—Is there______shop on Center Street?—Yes,______shop is in front of the post office.A.a,/ B.the,the C.a,the D.the,a( )Walk______the park and______from it,you can see the hotel on your right.A.across,through B.across;cross C.through 汉译英:体操比游泳难. 永远保护自己最重要的人 用英语怎么说 有什么动漫内容是忽然间拥有了某种力量而想用这种力量去保护身边最重要的人有什么动漫内容是忽然间拥有了某种力量,而会用这种力量去保护他所认为是自己最重要的人,即使会死而他还 身边最重要的人应该是什么人?除了父母,身边什么样的人算是最重要的人? 感叹句what后面可以跟动词么 比如 what seem to be ``````我今天在书上看到了 能不能给我解释以下 请你根据生活常识判断“谭晋玄”耳中曾经有“小人”是怎么回事 耳中人(蒲松龄)为什么“谭晋玄”耳中曾经有“小人”的原因 迪拜将孔明灯列为危险品:致火灾商铺将中国承建高速路给斯里兰卡带来的社会和泰国或明年起征收入境税 外国游客超三叙利亚副总理贾米勒被解职 为主要反对横跨欧亚大陆 土耳其海底隧道正式启用首条横跨欧亚海底隧道启用 可乘火车从日警方查获“大麻办公室” 现场发现1盘点打医生事件:美请FBI培训 日需埃及武打冠军因支持前总统穆尔西 金牌日本一法学系准教授因涉嫌携带毒品被逮美众议院情报委员会就窃听事件举行听证重温远征军保加利亚企业期待与中国加强“一带一路英国任性脱欧震动全球伙伴“脱欧”对A股影响是短暂的东风日产“寻找未知的自己”第二季完美划土壤环境质量类别保障农产品质量安全真相来了!网售闲置物品,却被买家盗刷499元非住宅库存去化压力大租赁新政激活存量部分在建工地有隐患消防器材配备存不足英国告别欧盟英超路在何方我是神豪我怕谁2奈何爱上你美女营销部的男修真华夏入侵之猛将来袭御龙魔卡师那些年:和九个女孩的日子古城疑案三败红颜末世危情:锻造女王成长记贵婢重生之媚宠南山牧场旅游姊妹湖旅游康定情歌景区旅游清华大学图书馆旅游三亚梦幻水上乐园旅游习水丹霞谷旅游乌江渡旅游前门箭楼旅游和平路商业街旅游阳澄湖莲花岛旅游二龙喉公园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘