0

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 経由の接続で何が問題になっているのでしょうか?

4

3 に答える 3

0

Microsoft の PHP 用ドライバーで奇妙なコンパイラ バージョンの問題が発生し、PHP の ODBC ドライバーとの接続の問題を解決しました。

//$pdo = new PDO("sqlsrv:Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for PHP.
$pdo = new PDO("odbc:Driver={SQL Server};Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for ODBC and PHP ODBC.
于 2014-10-08T08:45:46.657 に答える
0

SQLSRV は、UID がないことを使用して(uid==NULL || strlen(uid) ==0)、接続文字列に "信頼できる接続" フラグを設定する必要があることを示します。つまり、実行コンテキストによって暗示された資格情報を使用して接続します。

ドメイン ログインとパスワード (例: UID='MYDOMAIN\user') を明示的に渡すことはできません。

于 2014-02-19T20:32:46.270 に答える