web-dev-qa-db-ja.com

PDO sqlsrv:ドライバーが見つかりませんでした

PHPでSQL Serverに接続しようとしています。私のローカルマシンでXAMPPを使用すると、すべてがうまく機能します。しかし、今度はアプリケーションを本番サーバーに配置します。

このサーバーにはMicrosoft IIS 6.1がインストールされ、PHP version 7.0.7が実行されています。また、ODBCからドライバをインストールしました- here 。次に、php.iniファイルの次の行をコメント解除します。

extension=php_sqlsrv_7_nts.dll
extension=php_pdo_sqlsrv_7_nts.dll

ファイルは Microsoftの公式サイト から入手しました。

私の問題は何ですか?

残念ながら、IISを再起動した後。 PDO関数は、次のメッセージでPDOExceptionエラーをスローします。

could not find driver

接続には、ローカルマシンで非常にうまく機能する次の関数を使用しています。

try {
    $con = new PDO("sqlsrv:Server=" . SERVER . ";Database=" . DATABASE, USERNAME, PASSWORD);
    // set the PDO error mode to exception
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "No connection: " . $e->getMessage();
    exit;
}

他に何ができますか?

6

Windowsサーバーでエラーログを見つけた後、自分でエラーを解決しました。

私のログでこのエラーが発生しました:

[21-Apr-2017 07:12:14 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library '...\ext\php_pdo_sqlsrv_7_nts.dll' - %1 is not a valid Win32 application. in Unknown on line 0

次に、もう一度 driver をダウンロードして、x64-Driverをインストールしました。最後に問題なく動作します。

5

「ドライバーなし」エラーを解決するのに少し時間がかかりました。ここで説明したように、いくつかの手順を実行しましたが、新しいエラーの後に役立つ他の手順を見つけました。今後の参考のために:

  • Microsoft から最新のドライバーをダウンロードします(Julian Schmuckliによる)。
  • Phpinfo() を使用して、XAMPPが64ビット(!)かどうかを確認します。 32ビットを使用している場合は、別のドライバーが必要です。
  • ドライバーをPhp.iniファイルに追加し、DLLをphp/ext-folderに保存します(saber tabatabaee yazdiの質問)。
  • 接続には、次のコードを使用します。
$dbh = new PDO ("sqlsrv:Server=$server;Database=$dbname",$username,$pw); 



ポートを追加する場合は、次を使用します:

$server = "192.168.1.15, 51022";

ここで、IP(ホスト名にすることができます)はサーバーで、51022はポートです。

0
Jannick Breunis