PHPのライブラリidiorm経由でmysqlに接続しようとしました。
しかし、「Fatal error: Uncaught PDOException」エラーによりハマった。
対処方法がわかったのでメモ!
ライブラリidiormってなに?
idiormは、データベースを操作するORMライブラリです。
ORMライブラリとは、クソ面倒なSQLを書かなくても少ないコードでmysqlなどのDBを操作できるものです。
「Fatal error: Uncaught PDOException」エラーの対処方法
mysqlに接続しようとしたとき、以下のようなエラーが出ました。
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in /Users/oresama/develop/php/private_tools/idiorm.php:328
エラー発生時のコードは以下の通り
#修正前
ORM::configure('mysql:host=localhost;port=33306;dbname=dbのスキーマ名設定');
ORM::configure('username', 'root');
ORM::configure('password', 'mysql_pass');
ORM::configure('driver_options', [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
]);
「host=localhost」の部分を「host=127.0.0.1」で指定したら動くようになった。
dnsの設定の問題か?
あと、「PDO::MYSQL_ATTR_INIT_COMMAND => ‘SET NAMES utf8mb4’」部分でもDB側と違いがあるとうまく行かないケースがよくあるので注意が必要です。
修正後のコードは以下の通り。
#修正前
ORM::configure('mysql:host=127.0.0.1;port=33306;dbname=dbのスキーマ名設定');
ORM::configure('username', 'root');
ORM::configure('password', 'mysql_pass');
ORM::configure('driver_options', [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
]);
これで正しく動作するようになりました。
めでたしめでたし。