web-dev-qa-db-ja.com

PHP SQL Server PDOException:ドライバーが見つかりませんでした

私のサーバーはWindows2008サーバーです。 PHPバージョン7.2.7がインストールされ、実行されています。SQLServer11(64ビット)がインストールされ、機能しています(asp.netアプリがいくつか実行され、すでにそのデータベースを使用しています)

MicrosoftのWebサイトからPHP Sql Server Driversをダウンロードし、.dllファイルをPHP extディレクトリに配置しました。

PHP.iniに次を追加しました:extension=php_pdo_sqlsrv_7_nts_x64

私のデータベース接続をテストするために使用している.phpファイルには次のものがあります。

 $SqlServer = "THISSERVER\SQLEXPRESS";
 $SqlServerCon = new PDO("sqlsrv:server=$SqlServer;Database=TheDatabase", "DbUName", "DbPassword"); 
if (!$SqlServerCon) {die('Unable To Connect to Sql Server');}
else
{echo "Connection Successful";}     

私は得ています:PHP Fatal error: Uncaught PDOException: could not find driver in D:\Inetpub\wwwroot\TechStory2\DBtest.php:7(7行目は$ SqlServerCon行です)。

私は何を間違えましたか? SQL Serverに接続するには、何をする必要がありますか?

7
Soren

私はそれを理解しました。サーバーにODBC SQL Server用ドライバー17(msodbcsql_17.2.0.1_x64.msi)をインストールする必要がありました。SQLServerネイティブクライアント11.0はインストールされましたが、ODBC SQLServerのドライバー。

この問題または同様の問題を抱えている他の人のための将来の参照のために...

https://www.Microsoft.com/en-us/download/details.aspx?id=56567 からダウンロードできます(注:32ビットサーバーを使用している場合は、 msodbcsql_17.2.0.1_x86.msiをインストールします-誤って間違ったバージョンをインストールしようとすると、インストール中に通知されます)。ドライバをインストールした後、サーバーを再起動する必要があります。再起動を求めるプロンプトは表示されませんが、再起動する必要があります。

私のPHP.iniには、extension=php_pdo_sqlsrv_72_nts.dllextension=php_sqlsrv_72_nts_x64.dllを追加しました。これらは https://docs.Microsoft.com/en-us/sql/connect/php/system-)からダウンロードできます。要件-for-the-php-sql-driver?view = sql-server-2017

詳細については、 https://docs.Microsoft.com/en-us/sql/connect/php/loading-the-php-sql-driver?view=sql-server-2017 を参照してください。および https://docs.Microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-2017

これで、sqlsrv_connectまたはPDOのいずれかを使用してSQLServerへの接続を確立できます。

PDO接続テスト:

$SqlServer = "THISSERVER\SQLEXPRESS";
$SqlServerCon = new PDO("sqlsrv:server=$SqlServer;Database=TheDatabase", "DbUName", "DbPassword"); 
if (!$SqlServerCon) {die('Unable To Connect to Sql Server');}
else
{echo "Connection Successful";} 

sqlsrv_connect接続テスト:

$SqlServer = "THISSERVER\SQLEXPRESS";
$DbConnInfo = array( "Database"=>"TheDatabase", "UID"=>"DbUName", "PWD"=>"DbPassword");
$SqlServerCon = sqlsrv_connect( $SqlServer, $DbConnInfo);
if( $SqlServerCon ) {echo "Connection established";}
else
{echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));}
2
Soren

コメンテーターが言ったように-_.dll_構成行の最後に_extension=_を追加することは、問題から始めるのに良いはずです。

NTSバージョンの拡張機能を読み込もうとしていることもわかります(NTSは非スレッドセーフの略です)。正しいバージョンの拡張機能をロードしてもよろしいですか? PHPをNTSランタイムとして実行しているかどうかを確認してください。phpinfo();で確認できます。

0
michail_w