PHP から SQL Server データベースに接続しようとしていますが、接続文字列に問題があります。実際に試してみた効果と感想は以下の通りです。
PHP 5.3.13、Apache 2.2.22、Windows 7、および SQL Server 2008 R2 の実行
SQL Server Native Client 11.0 をインストールしました
代わりに SQLSRV ドライバーを使用して、MSSQL ドライバーの使用をやめました。
これらの拡張機能を php.ini にロードしました: extension=php_pdo_sqlsrv_53_ts.dll、extension=php_sqlsrv_53_ts.dll、extension=php_pdo.dll。
phpinfo() は、これらがアクティブであることを示します。
Registered PHP Streams php, file, glob, data, http, ftp, zip, compress.zlib, phar, sqlsrv
PDO drivers mysql, odbc, sqlite, sqlsrv
sqlsrv support enabled
接続コードは次のとおりです。
$serverName = "[servername]";
$connectionInfo = array( "Database"=>"[databasename]");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn )
{
echo "Connection established.\n";
}
else
{
echo "Connection could not be established.\n";
die( print_r( sqlsrv_errors(), true));
}
文字列は Windows 認証を使用するように設定されており、sqlsrv_errors() は次のように報告します。
[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[networkname]\[machinename]'
ネットワークID/PWDを使用してこれも試してみましたが、
[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[username]'
SQL Server クライアントと sqlcmd から問題なく接続してクエリを実行できるので、データベースが稼働していて機能していることは確かです。ネットワーク/マシンの資格情報を使用すると、SQL クライアントとコマンド ラインが機能します。ユーザー名/パスワードを入力しようとすると、コマンド ライン クライアントが失敗します。これは、PHP 接続が Windows 認証を使用して接続する必要があることを示します。
別のスレッドの誰かが、レジストリ エントリのアクセス許可を変更するとうまくいくと示唆していましたが、これは私の問題を解決しませんでした。PHP 5.3 が MS SQL に接続するネイティブ クライアントを認識しない
システム DSN の作成にも成功しました。接続テストは成功を報告します。
Microsoft SQL Server Native Client Version 11.00.2100
Running connectivity tests...
Attempting connection
Connection established
Verifying option settings
INFO: A network alias was found for the DSN server. 'Protocol: DBMSSOCN; Address: [servername]' was used to establish the connection.
Disconnecting from server
TESTS COMPLETED SUCCESSFULLY!
私はstackoverflow.com内で広範囲に検索しましたが、一般的にインターウェブは運がありません。明らかに、db 接続は他の方法を使用して有効ですが、PHP 経由の接続で何が問題になっているのでしょうか?