昨日、私のコードはすべて正常に機能していましたが、今日は突然私のデータベースに接続したくありません。コードやコードの設定を変更しておらず、ソフトウェアも更新していません。私がすることはこれだけです:
new PDO('mysql:Host=localhost;port=3306;dbname=test', 'username', 'password');
そして、私はこれを言っている素晴らしい例外メッセージを受け取ります:
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...
問題は、UNIXソケットを使用して接続するのではなく、TCP/IPを使用して接続することです。私は何を間違えていますか?ここに足りないものはありますか?
助けてくれてありがとう。
Unixソケットを使用しています。 「localhost」を読み取るとき、MySQLクライアントライブラリはTCP Hostとして解釈しません。「localhost」をホストし、その名前を解決しますが、デフォルトのソケットの場所を使用します。ローカルマシンでTCPを使用するには、127.0.0.1
をホスト名として使用する必要があります。
過去を指定するには、DSNでHost
の代わりにunix_socket
を使用します。 localhost
に使用されるソケットの場所は、コンパイル時に、またはpdo_mysql.default_socket
内のphp.ini
を使用してPHPの一部のバージョンで定義できます。
PHP PDOを使用したMySQLへの接続に関するドキュメントから: PDO_MYSQL DNS
最後のメモには次のように書かれています。
Unixのみ:
ホスト名が「localhost」に設定されている場合、サーバーへの接続はドメインソケットを介して行われます。 PDO_MYSQLがlibmysqlに対してコンパイルされる場合、ソケットファイルの場所はlibmysqlのコンパイルされた場所にあります。 PDO_MYSQLがmysqlndに対してコンパイルされている場合、pdo_mysql.default_socket設定を介してデフォルトのソケットを設定できます。
そのため、これを修正するには、php.iniでmysql.sockの場所を適切に構成する必要があります。
Mysql.sockファイルを見つけます。一般的な場所:
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',
そしてすべてが順調でした。
here で文書化されているDrushのドキュメントの更新があります。