PDO 找不到 ODBC 驱动程序

Posted

技术标签:

【中文标题】PDO 找不到 ODBC 驱动程序【英文标题】:PDO cannot find ODBC driver 【发布时间】:2014-07-23 07:15:00 【问题描述】:

尝试迁移到 PDO 以通过 ODBC 连接到远程数据库。

我的系统是 Windows 7 Pro,通过 FortiClient *** 连接到远程域,并连接了隧道模式。 (在编辑中添加: 运行 php 5.4,所以应该默认安装 PDO。)

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

系统 DSN 下: 系统数据源名称 = 'TheBigDB' 驱动程序 = 'instantclient_11_2 中的 Oracle' (64 位) TNS 服务名称 = '10.10.1.20:1521/BIGDB' 用户 ID = '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();
    

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

所以这是我的问题:给定一个带有 ODBC 的 Windows 7 系统,通过 *** 连接到一个 Oracle 数据库,似乎在没有 PDO 的情况下一切正常,我如何迁移连接参数以创建 PDO 连接? 也许一个更好的问题是为什么要使用 PDO 进行连接,但我一直在读到 PDO 更安全,所以我正在尝试使用它。

【问题讨论】:

【参考方案1】:

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

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

但是...对于 PHP 5.4.12 使用 ODBC 来访问 Oracle 11 DB,您需要编辑正确的 php.ini 文件(请参阅 this WampServer forum topic 以讨论三个中的哪一个php.ini 文件,您需要编辑)。在 Dynamic Extensions 下,取消注释 extension=php_pdo_odbc.dllextension=php_pdo_oci.dll(我都做了;不确定是哪一个成功了...)

另一个提示:在我的脚本中,odbc_connect()PDO() 都不适合我,除非我的连接是在 System DSN 选项卡下的 Windows 数据源管理员 中创建的.它在 User DSN 下不起作用。

【讨论】:

以上是关于PDO 找不到 ODBC 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

PDO:未捕获的 PDOException:找不到驱动程序

使用 PDO 的 MS Access PHP 连接“找不到驱动程序”错误

pdo sqlite 找不到驱动程序... php 文件未处理

PDO_OCI:找不到驱动程序

pdo_odbc 驱动程序问题

PDO 异常找不到驱动程序