尝试迁移到 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.dll
和 extension=php_pdo_oci.dll
(我都做了;不确定是哪一个成功了。 ..)
另一个提示:在我的脚本中,odbc_connect()
和 PDO()
都不适合我,除非我的连接是在 Windows 数据源管理器中创建的 em> 在系统 DSN 选项卡下。它在用户 DSN 下不起作用。
关于oracle - PDO 找不到 ODBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006920/