+ -
当前位置:首页 → 问答吧 → thinkphp使用pdo方式连接oracle

thinkphp使用pdo方式连接oracle

时间:2009-06-16

来源:互联网

因为一个项目需要读到oracle的一些表,所以在oralce服务器上开了个只读用户sgcc,原用户为ps4i.
  1.          config.php
  2. ------------------------------------------------------------------------------------------
  3. <?php
  4. if (!defined('THINK_PATH')) exit();
  5. return array(
  6. 'DB_TYPE'=> 'pdo',
  7. // 注意 DSN 的配置针对不同的数据库有所区别 请参考 PHP 手册 PDO 类库部分
  8. 'DB_DSN'=>"oci:dbname=". '(DESCRIPTION =
  9.     (ADDRESS_LIST =
  10.       (ADDRESS = (PROTOCOL = TCP)(HOST = a.b.c.d)(PORT = 1521))
  11.     )
  12.     (CONNECT_DATA =
  13.       (SERVICE_NAME = orafa)
  14.     )
  15.   )',
  16. 'DB_USER'=>'sgcc',
  17. 'DB_PWD'=>'********************',
  18.     'DB_CHARSET'=>'gb2312',
  19.     'DEBUG_MODE'=>true

  20. );
  21. ?>

  22. t_rtuModel.class.php
  23. --------------------------------------------------------------------------
  24. <?php
  25. class t_rtuModel extends Model
  26. {
  27.     protected $trueTableName = 'ps4i.t_rtu';//此处ps4i是oralce的用户。用于不同用户操作表
  28. }


  29. IndexAction.class.php
  30. --------------------------------------------------------------------------
  31. <?php

  32. class IndexAction extends Action{
  33.     public function index(){
  34.         header("Content-Type:text/html; charset=utf-8");

  35.          $rtu = D(t_rtu);
  36.         $rtusingle = $rtu->findall();
  37.         dump($rtusingle);
  38.     }

  39. }
  40. ?>
复制代码
这个不知道是不是1.5支持的操作方式,我在tp网站没找到范例,就自己试了上面的代码出来。
请大家指正。

作者: longdas   发布时间: 2009-06-16

好用吗? 有空我也试试,先标记之。 谢谢提供!

作者: semieye   发布时间: 2009-06-17

再补一下我去年写的一个文章:
longdas 09:51:38    11月17日
windows下搞定php用PDO连接oralce的问题
这几天要用php连异机的oralce,颇费了一番周折,现把经验共享如下:
1、首先下载instantclient-basic-win32-11.1.0.6.0.zip
http://www.oracle.com/technology ... htdocs/winsoft.html
此处需要注册一个oralce帐号才可以下载。

2、将所有文件解压放到c:\windows下面。

3、更改c:\windows\php.ini下几个选项:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
(在安装php的时候在ext选项选中这几项)

4、更改注册表:
注册表里 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 查找键 NLS_LANG,这个键由Oracle标准客户端安装创建, 值是 NA 。这个导致了 ORA-12705错误。解决方法就是修改NA为SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
Linux下 如果环境变量 NLS_LANG 值是NA 会引起 ORA-12705 错误,解决方法是修改set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

5、测试代码:
try{
     $conn = new PDO("oci:dbname=//a.b.c.d:1521/orafa",'user','passwd');
     //PDO("oci:dbname=//oracle远程IP:端口号/数据库名",用户名,密码);
     //若是本机上的数据库,可直接用PDO("oci:dbname=数据库",$db_username,$db_password);
     echo "连接成功";
}catch(PDOException $e){
     echo ("Error:".$e->getMessage()."<br>");
     die();
}


经验:

1、报: 30ORA-12705: Cannot access NLS data files or invalid environment specified
看上面第4步解决方法。


2、报:error: SQLSTATE[]: pdo_oci_handle_factory oci_driver.c:581
一般是版本不对,下载上面第一项的文件就可以了。

作者: longdas   发布时间: 2009-06-18

强烈支持一下

作者: jfaspx   发布时间: 2009-09-24

$rtu = D(t_rtu);
这里应该是$rtu = D("t_rtu");

作者: qiujian   发布时间: 2009-10-18

PDO方式连接oracle的话 有些功能不够支持 例如limit等 官方提供的oracle驱动更加完善一些其实

作者: thinkphp   发布时间: 2009-10-19

官方集成有么?

作者: tap131410   发布时间: 2011-11-17