Windows 2003 下 PHP5.2.5 + Apache2.2.8 + Oracle9i 的配置

php中文网
发布: 2016-05-19 14:04:52
原创
1222人浏览过

   关于 Windows 2003 下 php5.2.5 + Apache2.2.8 + Oracle10g/11g 的配置,请参考本人的博文:http://blog.why100000.com/?p=581。

   但 Oracle9i 却有点特殊,因为它已经将近10年高寿,在 IT 界的时间概念里,显然有点太古老了,以至于 PHP 的东家已经在考虑淘汰它了,所以 PHP5.0 以后的版本中的 php_oci8.dll 扩展在 Windows 下只支持10g以后的 Oracle 版本了。

   所以,尽管在 PHP5.0 的 php.ini 配置文件里打开了 php_oci8.dll 扩展,但还是无法加载 oci8 的数据库驱动,标志就是在 phpinfo() 函数的输出里看不到 OCI8 的配置信息,同时,运行操作数据库的 PHP 代码,会报告类似下面的错误信息:
   Fatal error: Call to undefined function oci_connect() in ……xxx.php on line yyy

   如果按照本人前述博文的方法配置,就会得到以下错误信息:ORA-03134: 不再支持连接到此版本的服务器。这是由于客户端与服务器版本不配套而引起的错误。

   通过与网友讨论和研究,发现以下办法可以解决问题:

   如果 Oracle 数据库服务器与 Apache+PHP 服务器不是同一台机器,则在 Web 服务器上用 Oracle 安装光盘安装 Oracle9i 的客户端软件(注意不是“即时客户端”软件包),比如路径是 D:\oracle\ora90。然后下载Oracle的“即时客户端”软件包(instantclient-basic-win32,前述文章介绍过),这里以版本 instantclient_10_2 为例,解压缩后拷贝以下三个文件到 D:\oracle\ora90\bin 下:
   oraociei10.dll
   orannzsbb10.dll
   oci.dll

   这三个文件的总大小大约为 89 MB。注意名字为“oci.dll”的文件在 D:\oracle\ora90\bin 下原来是存在的,复制前做个备份,也避免了复制时不允许覆盖的情况。这样做就是用 Oracle 目前的客户端软件包“升级”Oracle9i版本原来的包。不过这样做似乎不是官方文档所记载的,所以这样做会不会引起什么别的问题,就不得而知了。所以,建议在真正的生产环境下,最好别这样做,还是选用比较新的 Oracle10g/11g 数据库吧。

   做完后,测试 PDO 连接(需打开 php_pdo_oci.dll 和 php_pdo_oci8.dll)、ADODB 连接(使用 ADODB 类库)、OCI8 连接,都是正常的。

   PHPINFO 信息:

   oci8
   OCI8 Support  enabled
   Version  1.2.4
   Revision  $Revision: 1.269.2.16.2.38 $
   Active Persistent Connections  0
   Active Connections  0
   Temporary Lob support  enabled
   Collections support  enabled

   PHP ADODB 测试代码:

What-the-Diff
What-the-Diff

检查请求差异,自动生成更改描述

What-the-Diff 103
查看详情 What-the-Diff

     require_once("adodb/adodb.inc.php");
   $db = ADONewConnection("oci8");
   //$db->debug = 1;
   $db->Connect('mydb9', "scott", "tiger");
   $rs = $db->Execute("select * from emp");
   while (!$rs->EOF)
   {
    echo $rs->fields['JOB'] .'
';
    $rs->MoveNext();
   }
  ?>

   PHP PDOD 测试代码:

     try
   {
    //$dbh = new PDO("oci:dbname=mydb9;charset=UTF8", "scott", "tiger");
    $dbh = new PDO("oci:dbname=mydb9", "scott", "tiger");
   }
   catch(PDOException $e)
   {
    echo ($e->getMessage());
   }

   //设置字段名必须用小写,默认是大写
   $dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);

   $stmt = $dbh->PRepare("SELECT * from emp");
   if ($stmt->execute())
   {
    while ($row = $stmt->fetch())
    {
     echo 'JOB='.$row['job'].' ENMAE='.$row['ename'] ."
";
    }
   }
  ?>

  OCI 代码:

     $conn=oci_connect("scott","tiger","mydb9");
   $query="select * from emp where job=upper(:job) and deptno=upper(:deptno)";
   $statement=oci_parse($conn,$query);
   //设置绑定变量的取值
   $job="CLERK";
   $deptno=10;
   oci_bind_by_name($statement,":job",$job);
   oci_bind_by_name($statement,":deptno",$deptno);
   //执行语句
   oci_execute($statement);
   //取得结果数据
   oci_fetch_all($statement,$result);
   foreach($result as $rows)
   {
    echo "
";
    foreach($rows as $col_values)
    {
     echo $col_values;
    }
   }
   //释放资源
   oci_free_statement($statement);
   oci_close($conn);
  ?>

   作者:张庆(网眼) 2009-10-22

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号