Php PDO返回错误“;找不到驱动程序“;使用已知的工作DSN
我正试图通过php的Php PDO返回错误“;找不到驱动程序“;使用已知的工作DSN,php,pdo,odbc,dsn,Php,Pdo,Odbc,Dsn,我正试图通过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堆栈跟踪
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堆栈跟踪:#0 C:\inetpub\wwwroot\pdoClass.php(7):PDO->u构造('odbc:CS_HDZipCo…','demo','skdemo!')中的消息“找不到驱动程序”)#1{main}在C:\inetpub wwwroot\pdoClass.php的第7行抛出
$dsn
值是我在ODBC管理器中创建的dsn的名称
我知道这个特定的DSN可以工作,因为我能够构建另一个演示文件,并通过odbc\u 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));
我一直在网上查阅文档和其他资源,但我不明白为什么PHP在尝试使用PDO时找不到驱动程序
有什么想法吗
更新
我打开我的phpinfo页面,确保按照Marc B的注释安装了odbc驱动程序:
除非是其他驱动程序,否则看起来驱动程序已安装
另一个更新
根据Marc B的补充意见对我的phpini进行进一步检查后,我似乎没有安装POD ODBC特定的驱动程序:
所以在这里,如果我安装了pdo的ODBC驱动程序,
ODBC
将位于列表的末尾,正确吗?在最初问题的评论中得到Marc B的一些帮助后,发现问题来自于我对在web服务器上启用odbc
以及安装pdo_odbc
驱动程序的误解
虽然我在web服务器上启用了odbc,但我没有为PDO安装odbc驱动程序
该驱动程序是通过pdo访问odbc数据库所必需的
根据windows上的php.net文档,驱动程序已经包含在php构建中(我使用的是5.5版),只需要包含在php.ini
文件中
添加驱动程序并重新启动服务器后,我现在加载了驱动程序:
我在演示数据库上使用PDO进行的测试查询有效:
$dsn = 'odbc:CS_HDZipCodes32bit';
$username = 'demo';
$password = 'skdemo!';
$connection = new PDO($dsn, $username, $password);
$query = "Select * FROM ZipCodes";
$result = $connection->query($query);
foreach($result as $row){
var_dump($row);
}
丢弃:
感谢您的帮助Marc B.您是否在“坏”dsn上尝试了odbc_connect?是的,底部的代码块是我在odbc_connect上从顶部使用相同的dsn。好的,那么您是否检查了pdo odbc驱动程序是否已安装?pdo有自己的驱动程序,它不仅仅是“包装”odbc函数,它看起来像我一样。我用显示phpinfo的odbc部分的屏幕截图更新了原始问题。这是odbc本身,但不是pdo-odbc。它们是两个完全独立的数据库接口。这就是您的
odbc\u connect()
正在运行,但与pdo完全无关。特别是对于Windows,如果您完全确定php.ini
具有启用扩展的设置,请检查phpinfo()
以了解它在哪里加载了php.ini
。在我的例子中,它仍然在C:\Windows
中查找,我忘记了至少一个httpdPHPINIDir
指令来告诉它确切的位置。