web-dev-qa-db-ja.com

動作していることがわかっているDSNでエラー「ドライバーが見つかりませんでした」を返すPDO

私は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スタックトレース:#0 C:\ inetpub\wwwroot\pdoClass.php(7):PDO- > __ construct( 'odbc:CS_HDZipCo ...'、 'demo'、 'skdemo!')#1 {main}がC:\ inetpub\wwwroot\pdoClass.phpで7行目にスローされる

$dsn valueは、ODBC Manager。)で作成したDSNの名前です。

odbc manager's dsns

別のデモファイルを作成し、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ドライバーがインストールされていることを確認しました。

odbc in phpini

これが別のドライバーでない限り、ドライバーがインストールされているように見えます。

別のアップデート

Marc Bの追加コメントごとにphpiniをさらに調べると、POD ODBC特定のドライバーがインストールされていないようです:

enter image description here

したがって、ここで、pdo用のODBCドライバーがインストールされている場合、odbcがリストの最後にありますか?

12
Chris Schmitz

最初の質問のコメントでMarc Bから大きな助けを得た後、問題は私のWebサーバーでodbcを有効にしてpdo_odbcドライバがインストールされました。

Webサーバーでodbcを有効にしましたが、PDO用のodbcドライバーがインストールされていませんでした。

missing odbc driver

このドライバーは、pdoを介してodbcデータベースにアクセスするために必要です。

installing pdo に関するphp.netのドキュメントによると、ドライバーは既にPHPビルドに含まれていて(バージョン5.5を使用しています)、php.iniファイル。

including php_pdo.dll

ドライバーを追加してサーバーを再起動した後、ドライバーをロードしました。

enter image description here

デモデータベースで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);
}

ダンプアウト:

pdo var dump

助けてくれてありがとうMarc B.

12
Chris Schmitz