PDO找不到ODBC驱动程序

时间:2014-06-03 04:02:57

标签: oracle pdo odbc database-connection windows-7-x64

尝试迁移到PDO以实现与远程数据库的ODBC连接。

我的系统是Windows 7 Pro,与远程域的FortiClient VPN连接,以及连接的隧道模式。 (在编辑中添加:运行PHP 5.4,因此默认情况下应安装PDO。)

Windows 7 ODBC数据源管理器中的数据源配置如下(为安全起见,某些名称已更改):

  • 系统DSN 下:
    • 系统数据源名称 =' TheBigDB'
    • 驱动程序 =' Oracle in instantclient_11_2' (64位)
    • TNS服务名称 =' 10.10.1.20:1521 / BIGDB'
    • UserID =' BigDBUser'
    • 所有其他设置均为安装驱动程序的默认设置

以下PHP非PDO代码能够创建可用于查询的连接:

    if (!($myConn = odbc_connect('TheBigDB','BigDBUser','myPwd'))) {
        echo "No ODBC connection<br />";
    }

所以我可以连接到数据库。问题是在PDO中进行。以下PHP ...

    try {
        $odbcConn = new PDO('odbc:Driver={Oracle in instantclient_11_2};Server=10.10.1.20:1521;Database=BIGDB;Uid=BigDBUser;Pwd=myPwd');
    } catch (PDOException $e) {
        echo 'PDO connection failed: ' . $e->getMessage();
    }

...导致 PDO连接失败:无法找到驱动程序消息。我的第一次尝试更多地依赖于数据源管理员;看起来像这样:

    try {
        $odbcConn = new PDO('MyBigDB','BigDBUser','myPwd');
    } catch (PDOException $e) {
        echo 'PDO connection failed: ' . $e->getMessage();
    }

同样的事情 - 找不到驱动程序

所以这里是我的问题:鉴于Windows 7系统通过与Oracle数据库的VPN连接使用ODBC,所有这些系统似乎都可以在没有PDO的情况下工作,如何迁移连接参数以创建PDO连接?也许更好的问题是为什么要把PDO用于连接,但我一直认为PDO更安全,所以我试图使用它。

1 个答案:

答案 0 :(得分:2)

更多挖掘给我一个答案。创建使用Windows数据源ODCB连接的PDO对象的正确语法不是我展示的,而是这个(减去try / catch):

    $myConn = new PDO('odbc:TheBigDB','BigDBUser','myPwd');

但是......使用ODBC来触摸Oracle 11 DB的PHP 5.4.12,您需要编辑正确的 php.ini 文件(有关其中的讨论,请参阅this WampServer forum topic您需要编辑的三个 php.ini 文件)。在动态扩展程序下,取消注释extension=php_pdo_odbc.dllextension=php_pdo_oci.dll(我做了两个;不确定哪个做了诀窍......)

另一个提示:在我的脚本中,odbc_connect()PDO()都没有为我工作,除非我的连接是在系统DSN下的 Windows数据源管理员中创建的/ em>标签。它在用户DSN 下无效。