PHP / PDOを使用してMySQLに接続する際のエラー
質問
昨日、私のコードは問題なく機能していましたが、今日は突然私のデータベースに接続したくありません。コードやコードの設定を変更しておらず、ソフトウェアも更新していません。私がすることはこれだけです:
new PDO( 'mysql:host = localhost; port = 3306; dbname = test'、 'username'、 'password');
そして、次のような素晴らしい例外メッセージが表示されます:
警告:PDO :: __ construct():[2002]そのようなファイルまたはディレクトリはありません(unix:///tmp/mysql.sock経由で接続しようとしています)...
問題は、UNIXソケットを使用して接続するのではなく、TCP / IPを使用して接続することです。何が間違っていますか?ここに足りないものはありますか?
ご協力ありがとうございます。
解決
Unixソケットを使用しています。 " localhost"を読むときMySQLクライアントライブラリは、TCPホスト" localhost"として解釈しません。その名前を解決しますが、デフォルトのソケットの場所を使用します。ローカルマシンでTCPを使用するには、ホスト名として 127.0.0.1
を使用する必要があります。
過去を指定するには、DSNで host
の代わりに unix_socket
を使用します。 localhost
に使用されるソケットの場所は、コンパイル時に、または php.ini
の pdo_mysql.default_socket
を使用してPHPの一部のバージョンで定義できます。 。
他のヒント
PDOを使用したMySQLへの接続に関するPHPドキュメントから: PDO_MYSQL DNS
最後のメモには次のように書かれています:
Unixのみ:
ホスト名が" localhost"に設定されている場合、 サーバーはドメインソケットを介して作成されます。 PDO_MYSQLがに対してコンパイルされる場合 libmysqlの場合、ソケットファイルの場所はlibmysqlにあります コンパイルされた場所。 PDO_MYSQLがmysqlndに対してコンパイルされる場合 デフォルトのソケットは、pdo_mysql.default_socket設定で設定できます。
これを修正するには、php.iniでmysql.sockの場所を適切に設定する必要があります
-
mysql.sockファイルを見つけます。一般的な場所:
- /tmp/mysql.sock
- /tmp/mysql/mysql.sock
- /var/mysql/mysql.sock
- またはMAMPまたはLAMPを使用する場合は、mysqlのtmpフォルダー内を探します
-
php.iniファイルを編集し、pdo_mysql.default_socketの値を適切に設定します
-
Apacheサーバーを再起動して、php.iniファイルの変更を取得します
Ubuntuでは、php.iniでこの設定を使用できます
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
この行を追加しました:
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
そしてすべてが順調でした。
こちらに記載されているDrushのドキュメントの更新があります。
>