【发布时间】:2015-10-27 02:40:35
【问题描述】:
我正在尝试通过 php 的 PDO 类连接到 odbc 数据库:
$dsn = 'odbc:CS_HDZipCodes32bit';
$username = 'demo';
$password = 'skdemo!';
$connection = new PDO($dsn, $username, $password);
die( var_dump( $connection ) );
但是当我这样做时,我得到了错误:
致命错误:在 C:\inetpub\wwwroot\pdoClass.php:7 中未捕获的异常“PDOException”和消息“找不到驱动程序”堆栈跟踪:#0 C:\inetpub\wwwroot\pdoClass.php(7) : PDO->__construct('odbc:CS_HDZipCo...', 'demo', 'skdemo!') #1 {main} 在第 7 行的 C:\inetpub\wwwroot\pdoClass.php 中抛出
$dsn 值是我在 ODBC 管理器中创建的 DSN 的名称。
我知道这个特殊的 DSN 有效,因为我能够构建另一个演示文件并通过 odbc_connect 成功连接:
$connection = odbc_connect("CS_HDZipCodes32bit", 'demo', 'skdemo!');
if(!$connection){
die('connection failed');
}
$statement = "SELECT * FROM ZipCodes";
$result = odbc_exec($connection, $statement);
// Outputs the zips as expected
var_dump(odbc_result_all($result));
我一直在挖掘PDO-ODBC 文档以及其他在线资源,但我无法弄清楚为什么 PHP 在尝试从 PDO 时找不到驱动程序。
有什么想法吗?
更新
我打开了我的 phpinfo 页面,以确保按照 Marc B 的评论安装了 odbc 驱动程序:
除非这是不同的驱动程序,否则该驱动程序似乎已安装。
另一个更新
根据 Marc B 的附加评论进一步检查我的 phpini,看来我没有安装 POD ODBC 特定驱动程序:
所以在这里,如果我安装了 pdo 的 ODBC 驱动程序,odbc 将在列表的末尾,对吗?
【问题讨论】:
-
你在你的“坏”dsn上试过odbc_connect吗?
-
是的,底部的代码块是我使用与 odbc_connect 顶部相同的 dsn。
-
好的,那你检查一下是否安装了pdo odbc驱动? pdo 有自己的驱动程序,而不仅仅是“包装”
odbc_*()函数。 -
看起来像我。我用显示 phpinfo 的 odbc 部分的屏幕截图更新了原始问题。
-
这是 odbc 本身,而不是 pdo odbc。它们是两个完全独立的数据库接口。那是你的
odbc_connect()正在运行,但与 pdo 完全无关。