尝试迁移到PDO以实现与远程数据库的ODBC连接。
我的系统是Windows 7 Pro,与远程域的FortiClient VPN连接,以及连接的隧道模式。 (在编辑中添加:运行PHP 5.4,因此默认情况下应安装PDO。)
Windows 7 ODBC数据源管理器中的数据源配置如下(为安全起见,某些名称已更改):
以下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更安全,所以我试图使用它。
答案 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.dll
和extension=php_pdo_oci.dll
(我做了两个;不确定哪个做了诀窍......)
另一个提示:在我的脚本中,odbc_connect()
和PDO()
都没有为我工作,除非我的连接是在系统DSN下的 Windows数据源管理员中创建的/ em>标签。它在用户DSN 下无效。