犬ターネット

PDO 経由で host名に localhost を設定すると SQLSTATE[HY000] [2002] No such file or directory エラー

2016-12-27 php mysql

host名に localhost を指定してPDO経由で接続すると以下エラーが発生して接続できない。

SQLSTATE[HY000] [2002] No such file or directory

ちなみにコンソールから mysql -u user -p をやると繋がる。ユーザ権限は以下のように localhost を許可している。

mysql> select user,host from mysql.user;
+-----------+---------------+
| user      | host          |
+-----------+---------------+
| user      | localhost     |
| mysql.sys | localhost     |
| root      | localhost     |
+-----------+---------------+

いろいろ調べた結果、以下で解決できた。

まずはユーザ権限に 127.0.0.1 を追加。

mysql> GRANT ALL PRIVILEGES ON db.* TO user@"127.0.0.1" IDENTIFIED BY "password" with grant option;
mysql> select user,host from mysql.user;
+-----------+---------------+
| user      | host          |
+-----------+---------------+
| user      | 127.0.0.1     | ←これ追加
| user      | localhost     |
| mysql.sys | localhost     |
| root      | localhost     |
+-----------+---------------+

そんで PDO から繋ぐときに localhost ではなく 127.0.0.1 を指定。これで無事接続できた。

理由っぽいのは多分これ…か?

http://php.net/manual/ja/function.mysql-connect.php

注意: サーバー名に "localhost" や "localhost:port" を指定した場合、MySQL クライアントライブラリはそれをオーバーライドし、 ローカルソケット(Windows では名前つきパイプ)に接続しようとします。 TCP/IP を用いたい場合は、"localhost" のかわりに "127.0.0.1" を用いてください。

今年買ってよかったもの

スシロー