web-dev-qa-db-ja.com

PHP / PDOを使用してMySQLに接続する際のエラー

昨日、私のコードはすべて正常に機能していましたが、今日は突然私のデータベースに接続したくありません。コードやコードの設定を変更しておらず、ソフトウェアも更新していません。私がすることはこれだけです:

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を使用して接続することです。私は何を間違えていますか?ここに足りないものはありますか?

助けてくれてありがとう。

33
user221314

Unixソケットを使用しています。 「localhost」を読み取るとき、MySQLクライアントライブラリはTCP Hostとして解釈しません。「localhost」をホストし、その名前を解決しますが、デフォルトのソケットの場所を使用します。ローカルマシンでTCPを使用するには、127.0.0.1をホスト名として使用する必要があります。

過去を指定するには、DSNでHostの代わりにunix_socketを使用します。 localhostに使用されるソケットの場所は、コンパイル時に、またはpdo_mysql.default_socket内のphp.iniを使用してPHPの一部のバージョンで定義できます。

86
johannes

PHP PDOを使用したMySQLへの接続に関するドキュメントから: PDO_MYSQL DNS

最後のメモには次のように書かれています。

Unixのみ:

ホスト名が「localhost」に設定されている場合、サーバーへの接続はドメインソケットを介して行われます。 PDO_MYSQLがlibmysqlに対してコンパイルされる場合、ソケットファイルの場所はlibmysqlのコンパイルされた場所にあります。 PDO_MYSQLがmysqlndに対してコンパイルされている場合、pdo_mysql.default_socket設定を介してデフォルトのソケットを設定できます。

そのため、これを修正するには、php.iniでmysql.sockの場所を適切に構成する必要があります。

  1. Mysql.sockファイルを見つけます。一般的な場所:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • または、MAMPまたはLAMPを使用する場合は、mysqlのtmpフォルダー内を探します
  2. Php.iniファイルを編集し、pdo_mysql.default_socketの値を適切に設定します

  3. Apacheサーバーを再起動して、php.iniファイルの変更を取得します

9
Ilie Pandia

Ubuntuでは、php.iniでこの設定を使用できます

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
2
Danial

私はこの行を追加しました:

'unix_socket'   => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',

そしてすべてが順調でした。

1
dean cameron

here で文書化されているDrushのドキュメントの更新があります。

0
Mike Gifford