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

使用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;}}?> 

 

 

挑战和机遇并存:大数据时代机器学习与可视化 【企业开源系列】收发一条Twitter推文的背后 在IE11中更快地获得您需要的内容 暴露程序员身份的8个行为 英特尔创新应用大赛大评审!创新也有中国风 苹果面临一问题:正源源不断地失去优秀工程师 初学编程者必知的五个网站 大数据基准测试专题论坛:基准测试是一把尚未完成的尺子 大数据应用(下):应用驱动技术,DaaS创造价值 大数据研究与发展专题论坛:大数据在各领域中的应用及发展策略 雅虎新目标:欲收购照片分享网站Imgur 移动开发工具访谈《近匠》第01期:七牛云存储—BaaS进化论 ShareSDK:A轮融资到位!将推社会化评论SDK 70美元,你也能用Raspberry Pi做个专属iBeacon基站 7个鲜为人知却超实用的PHP函数 从管理远程式团队和分布式团队中所获得的宝贵经验 Netflix开源数据流管理器Suro Google新创意:天花板加麦克风 人脑植芯片 苹果获弯曲屏新专利 可给手机弄个大波浪卷 真正的跨平台硬件测试:3DMark已打通PC、iOS、Android 将Chrome浏览器变成终端工具 【开源推荐】AllJoyn:打造全球物联网的通用开源框架 21张图带你走进Google数据中心 Snapchat C轮融资5000万美元 投资方是Coatue Management 又一个被谷歌寄生的平台,Chrome应用启动器现来到OS X上 雷军遇上刘德华:创业、艺术、移动互联网 为了抗衡Android,传微软开始考虑WP和WinRT免费 维护代码库的五个精华实践 微软发布安全补丁 IE11.0.2随之而来 Qt 5.2正式版发布 全面支持移动平台 如何节约手游制作成本?揭秘CocoStudio编辑器强悍功能 如何获取用户本地机的分辨率? 菜鸟的问题!!!在线等待! 请问一下印度做软件的报价~~~?? 急急~~ 求求求!!~~ 给满100分!! 关于WinRunner中遇到的难题,请高手帮忙! 请大家帮忙推荐几款linux下比较好用的看jpeg图和看mpeg4比较好用的软件! 请问数据库应用程序如何制作安装程序? 笔记本突然出现很多马赛克,然后死了,大概是什么原因? 各位大虾请进 求:0,1,-1的N长度组合算法 各位问一个比较少见的问题100分相送,急急急!!! 这样的条件判断语句要怎么写?(很简单的) 一款很不错的电子图书制作、资料管理软件 在-卢-<<利用XML实现通用WEB报表打印>>时报:未将对象引用设置到对象实例 DBEdit如何限制输入格式? 简单问题 ★★★狂急!请问怎样取得文件的创建日期!在线等!在线结贴!★★★ 初学xml,很简单的问题,就是不会,各位近来看看!一行代码搞不定… 有没有用于unix下c开发的dbx调试图形界面的工具? 哪位有tar 和 gzip 命令参数的详细中文介绍 jsp网站测试,欢迎大家测试 提问 请问有没有直接可以HTML(XHTML、SHTML)生成XML-XSL!!的工具 进程外组件的关于注册的问题? jsp中怎样生成静态页面 请问:如何返回webservice类的一个或多个实例? 怎样触发另一个窗口中的javascript函数? 谁能提供一些检测内存泄露的工具或方法 如何将 FoxBase 中的数据导入到 SQL Server 中? 求助:API操作注册表出现奇怪问题 请问如何改变windows xp中的用户的登陆顺序 有问题:如何通过页面下载附件? 求助:VB生成安装文件的问题 下面的程序怎样优化?(着急) 怎么样在C++ Builder 的Form上显示文字!我不要用控件,要直接显示在Form上 200 分相送 高手请进 请教如何写成特殊格式文件的存取的问题. 适配器更新数据集怎么用事务 怎样才能设“开机密码”? 哪位高手可以给我介绍一下TOMCAT和APACHE,我刚接触,需要了解一下 关于SocketConnection. 进入linux8.0后,主板指示灯闪烁问题,请高手指教。 谁给一个QQ给我啊? 高分请教? 如何查看一个记录集中游标的位置。 求一个简单的窗口函数 请问如何实现计算器功能 如何修改这个脚本?(应该比较简单) 大伙能否谈谈.net整体软件框架的设计 来者有分:调查:大家是在用vc.net还是用vc60,我在用vc60 用SQL SERVER如何实现插入数据后立刻取出插入的数据的id?在线等待,急~~~~~~~ 关于JTree 在正方体AC1中,E为AA1中点,求面B1DE和面ABCD所成角的大小 3dmax如何将物体旋转复制成圆形?怎样把这瓦以圆形的方式均匀的复制 盖在这房子上面? 为什么会有恐怖主义,他们针对的是什么? 认识被压迫民族反抗外来侵略的斗争与当今时代民族恐怖主义的本质区别800字,11月19号之前给出解答,对一楼的回答,我只能说不是我不想花钱,而是时间紧迫,我没时间去开通网上银行或汇 什么事灵魂?我想知道各宗教的看法 传递函数系统稳定性请问一个闭环系统的传递函数为Q(s)=s^2(s+1)/(s^3+s^2+K)为什么对于所有K不等于0都是不稳定的?怎么看出来的? 物理磁场题,(只看13) 3Dmax 怎么把不同的对象围成一个圆圈大概有二三十个对象,想把他们围成一个圆圈怎么弄, 体育中极限强度的含义? 如何在3Dmax里面画扇形啊?我想在墙上打一个扇形窗子! 3dmax里面我要一个物体围着圆形旋转,并复制,怎么操作的呢? 100ml的HNO3(浓度:0,01mol/L)和200ml的HCL混合,PH为1.75,求HCL的浓度. 那两个词语 离子共存(不懂别进!)在酸性条件下,硝酸根离子和氯离子溴离子可以共存吗? 弯曲极限强度与切应力和正应力有什么关系?没听过弯曲极限强度啊? 阿可以组那两个词 为什么圆周运动的物体的加速度不断变化是因它不停的改变运动方向详细且准确 为什么楼上的卫生间冲水时,下水管道会有非常响的撞击声?我们家住9楼,为什么楼上的卫生间冲水时,卫生间顶上的下水管道会有非常响的撞击声?这声音类似"空咙,空咙"的撞击声,而且楼上冲水 ansys实体建模的圆阵列问题~~~我本来要阵列6个,但是只能生成5个,而且剩下的那个镜像也出不来,急呀··· GIS工作怎么样? 空间中PQ两点处各固定一个点电荷 其中P点怎么看出来PQ是等量异号电荷的? 请帮我把这两个词解释一下 学地理信息系统的女生适合找什么样的工作 PQ是某电场中的的一条电场线,将负电荷从P点由静止释放,只在电场力的作用下沿电场线运动到Q点,这过程中电荷的VT图像如图B所示,正确的是?D这电场是点电荷形成的电场,这句话为什么错 ansys建模时怎么让一个圆面沿着一条曲线扫描成实体? GPS和GIS怎么配合工作? 英语翻译歪脖老母的传说歪脖老母距今1500多年历史,来这里朝拜的人很多.他是观世因化身之一,被信徒们称为有求必应的灵验之神.他是全世界唯一尊“歪脖”佛像.当年,南海落潮,水面上出现 寻求有关紫铜T2弯管是弯曲外壁开裂原因分析 3Dmax中物体怎么沿着路径进行复制啊? 自来水管呜呜叫怎么回事 连接正方体每个面的中心构成一个正八面体.已知正方体的边长为6厘米,问正八面体的体积为多少? 自来水管响怎么办 自来水管为什么会响?我家的自来水管经常响,而且声音非常大,有时象火车的轰隆声,有时象火车的汽笛声,吵得人睡不着觉.为什么会这样? 如图,所有正方形的中心均在坐标原点,且各边与x轴或y轴平行,从内到外,它们的边长依次为2,4,6,8…,顶点依次用A1,A2,A3,A4…表示,则顶点A2014的坐标是________. 关于自来水管响的问题我们家厨房的自来水管这些天来经常会响,感觉是别人家一放水我们家的水管就会响并且开始流水(越来越大了).现在发现厕所的水管放水时厨房的也会流水还关不掉 什么叫极限跑酷运动? 已知正方形的边长等于6,对角线的交点在原点,边与坐标轴平行,求它各顶点的坐标. 关于GIS的金短时间的解释? testify和verify的区别,用中文举例说说?可以参考这题:The plane found the spot and hovered close enough to ___ that it was a car.A.verify B.testify 如图,正方形OBCD的边长等于6,边OB与x轴正半轴的夹角为30°,o点是坐标原点 求正方形各顶点的坐标, 国际社会如何定义恐怖主义 confirm,ascertain,substantiate 区别?confirm,ascertain,substantiate 都有“确认、证实”的意思,怎么区分? 下列各组离子在溶液中不能大量共存,且加入过量NaoH溶液或过量盐酸均能得到澄清溶液的是()?B Al3+,na+,CO32-,NO3-D Alo2-,CO32-,K+,Na+为啥?D不对? 模联议题:恐怖主义定义!如何入手啊?参加商会的一个议题,不知道该怎样切入,哪里是突破点.求神助!代表国家是德国. confirm和verify哪个可以搭配figuresQ:Did you (verify) (confirm) these figures?用confirm好,还是verify好?为什麽?请详细说明理由,不要只是复制粘贴,谢谢~!有独到见解的给与加分~!请高手解答~不胜感激…… 进水管A注满一个池子的水要花10分钟.排水管B排完整个池子的水要花20分钟.当A管 如何判断恐怖主义分子,怎么定义的? 凸透镜的成像规律物距和像距的关系当 f There ____ some mistakes in your composition. A have B has C seems D seem to be这条题目应该选什么答案...求解释...谢谢..!尽量详细点! 恐怖主义的概念,特征及国际社会的影响是什么? CF常说别BB There __some mistakes in your composition.A,seems to be B,seem to be 为什么选B,A为什么不对?mistake 不是可是名词吗? 3dsmax 中怎么获取三维物体沿轴线的各个切面? 为什么水壶烧开好壶嘴烧开后一定距离才能看见白气 There seen to be some mistake in your composition.seem to be 为何不能换为have 在非取暖期时在铁制管道内充满水,原因是在非取暖期时在铁制管道内充满水,以减缓其锈蚀,原因是———— 基本放大电路动态分析中把直流电压源视为“接地”,为什么是视为“接地”?而不是视为其他.我是知道“叠加原理”的,我的意思是为什么不把它开路悬空分析,而是要接地 反邪教的重要意义、现实危害、本质特征、渗透途径和防范措施 .要材料 恐怖主义到底在针对谁 直流电压源除源怎么处理,接地还是短路还是断路 阿盟呼吁叙利亚反对派参与日内瓦国际和印度一名女婴患家传怪病 身体多毛酷似埃及前总统穆尔西审判前夕 两名当地警太平洋岛国被指有日本沉船宝藏 价值8克罗地亚中央墓园--欧洲最美的墓园【印度女婴家传怪病 身体多毛酷似狼孩(俄罗斯军事动作令邻国不安 北约军演以印度将发射环火星探测器 否认与华“太英国15岁少年欲滑雪闯南极 探险为筹最贵钻石亮相纽约 估价超六千万美元(泰游船沉没一中国游客遇难中国金融改革步入深水区 推进内外开放克里中东之行访埃及 停留数小时修复两男子患病“变形”却不“金刚” 被迫宅永嘉一家六口当老鸨栽了非洲多国出现罕见混合型日食克里访开罗寻求修复美埃关系长兴3万株古银杏披“金”衣与青山翠竹浙江富阳万市镇“银杏之秋”开游式在杭常山举行处置村级组织换届群体性突发事湖南三姐弟上学途中遇害 学校:校车司只要你喜欢孩子就好!这么机智的一拍,好聪明!说的好有道理,无法反驳!姑娘,你身上有xiongzhao啊!他的丁丁比我的还长为什么大家都想要我。。。法海不懂爱的真正原因印度不忿中国卖巴铁武器:没中国你们早婚姻线像天安门一样。。。对,我脱单了。筒子们学起来搞火了,我马上招人嫁了谁是中国的“巴菲特”中俄暗渡陈仓,十大致命武器,美国佬彻我想去你家蹭饭!好~蹭吧~我要自已来!我再也不迟到了!咱也过把富二代的瘾!真的很想停下脚步感受身边的风景API数据利空,美油短期跳水,早间大考试什么的没有然后了老爸你死得好惨啊!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘