Linux VM 上でホストされている SQL Server データベースに接続しようとしています。開発用 Windows マシンで xampp を実行しており、構築中の PHP サイトから接続しています。接続には sqlsrv
を使用する必要があると思います。 DLL sql-server-ver15&viewFallbackFrom=sql-server-2019## を https://learn.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view= からダウンロードしました#
xamppphpetc ディレクトリに移動しました。また、php.ini ファイル内の拡張ディレクトリが
extension_dir="C:xamppphpext" であることも確認しました。
Dynamic Extensions セクションに次の内容が追加されました:
リーリー
php_ プレフィックスを削除すること、
.dll サフィックスを削除すること、ts を使用するかどうかにかかわらず、すべてのファイルを拡張ディレクトリに移動すること (上記にリストされているもののみ) に関する情報をオンラインで見つけました。
php8ts を除くいくつかのファイルがディレクトリ情報に移動されました。 dll など上記のすべての構成を、論理的および非論理的の両方で試しました。
リーリー
複数の異なる接続例を試してみました。上記を実行すると、次のエラーが発生します:
致命的エラー: キャッチされない PDOException: C:xampphtdocssiteindex.php:123 でドライバーが見つかりません スタック トレース: #0 C:xampphtdocssiteindex.php(123): PDO ->__construct('sqlsrv:Server= my_server_ip', 'username ', 'password') #1 {main} は 123ここからは論理的にOKだと思いました。行目で C:xampphtdocssiteindex.php をスローします
phpinfo(); をエコーして確認しましょう。リストのどこにも
sqlsrv または PDO バリアントは何もリストされていません。 sqlsrvページでctrl fを押しても上記のエラーしか見つかりません。
私が試したその他のことは、PDO の代わりに
sqlsrv_connect を使用することです。私の PHP バージョン (8.1) に関して矛盾する情報を見つけましたが、とにかく試してみることにしました。ただし、その亜種に遭遇すると、次のような結果が得られます:
致命的エラー: 未定義の関数 sqlsrv_connect() を呼び出しています私にとって、.dll が認識されていないか、そのようなものであることは明らかです。しかし、私は一生その理由を理解できません。すべてが管理者として実行されていることを確認し、xamppを複数回再起動し、DLLを削除/再ダウンロードしたことなどを確認しました。
私が思いつかなかった明らかな問題を誰かが指摘できますか?
解決しました。質問は 2 つあります。
Xampp インストールが破損しています。ページ上で
echo phpinfo();
を使用したときに気づいた新しい DLL はどれも認識されません。ini に拡張子が x64 として書き込まれているにもかかわらず、何らかの理由で、ini ファイル構成では x64 ではなく x86 DLL を使用しようとします。
解決手順:
デフォルト設定を使用して Xampp を再インストールし、再構成したところ、DLL が認識されるようになりました。
Xampp の拡張機能ディレクトリから x86 dll を削除しました。
最終的な php.ini は次のようになります:
リーリー最終的な .dll の使用は冗長になる可能性がありますが、期待どおりに動作します。 php のバージョンと互換性の問題がある可能性があるため、sqlsrv または pdo_sqlsrv の正しいバージョンを必ず確認してください。