2

PHP 5.4にアップグレードし、CodeIgniterのPHPフレームワークを使用した後、アプリケーションはSQLServer2005データベースへの接続を拒否しました。構成の変更は行われず、PHP SQLSRVドライバー(3.0.3)もインストールするようにしました。CIからの具体的なメッセージは、「提供された設定を使用してデータベースサーバーに接続できません」でした。

PHP 5.3に戻すと、すべてが機能します。

sqlsrvドライバーがPHP5.4にインストールされていることを確認するために、実行php -mすると「sqlsrv」と表示されます。phpinfo()もよさそうです。

sqlsrvが新しいドライバーに接続しない方法/理由に関するデバッグ情報を取得できません。面白いのは、 MSのサイトにあるこの面白いド​​ライバーのページからsqlsrv-5.4-nts-snap.zipをダウンロードすると、機能することです。ただし、sqlsrv2.0ドライバーを使用しているようです。

SQLSRVはPHP5.4で動作しますか?

4

1 に答える 1

2

最後に、この問題をデバッグします。問題は、共有メモリ/名前付きパイプの代わりにTCP/IPを使用する場合の接続パラメータにあることがわかりました。CodeIgniterでの接続設定は次のとおりです。

$db['default']['hostname'] = 'localhost';

に相当:

$db = sqlsrv_connect("localhost", $config);

このsqlsrv_connectを適切な構成変数(username / password / UTF-8 / etc)で実行するカスタムページを作成しました。それからprint_r( sqlsrv_errors());私を使用して次のように会いました:

[Microsoft] [SQL Server Native Client 11.0]共有メモリプロバイダー:SQLServer2000への接続に使用される共有メモリdllが見つかりませんでした

奇妙な!しかし、これは共有メモリとTCP/IPに関連するものであることがわかりました。「SQLServer用PHP用Microsoftドライバー」のドキュメント(chmファイル)を調べたところ、TCP / IP(ローカルボックス上)経由で接続するには、サーバー名として使用する必要があることが(local), 1433わかりました。1433はどのポートでもかまいません。を使用します。

変更を要約します(CodeIgniter固有ですが、一般的にsqlsrv_connectの場合も同様です)。/application/config/database.phpを変更しました:

$db['default']['hostname'] = 'localhost';

$db['default']['hostname'] = '(local), 1433';
于 2012-11-02T22:31:24.883 に答える