oracle - PDO 找不到 ODBC 驱动程序

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

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

我的系统是 Windows 7 Pro,通过 FortiClient VPN 连接到远程域,并以隧道模式连接。 (在编辑中添加:运行 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();
    }

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

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

最佳答案

更多的挖掘给了我答案。创建使用 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() 都不适合我,除非我的连接是在 Windows 数据源管理器中创建的 em> 在系统 DSN 选项卡下。它在用户 DSN 下不起作用。

关于oracle - PDO 找不到 ODBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006920/

相关文章:

php - 当进行相同的 PDO 查询(参数不断变化)时,我是每次都调用prepare(),还是只调用一次?

php - 从搜索框中获取内容在数据库中查找它

java.sql.SQLException : No database selected - why? 异常

oracle - 在 Oracle 中何时使用 vsize 函数而不是 length 函数的有用示例?

sql - FORALL 与 FOR 批量更新

php - SQL 包含语句

python - UnicodeDecodeError : 'utf-16-le'

ODBC 中的 Haskell Unicode 列名

Oracle 减查询。如果顶部 SQL 和底部 SQL 不包含 NULL,如何获得带有 NULL 的结果?

sql - Oracle SQL : How to generate a cricket match point table with details such as win count, 丢失计数等?