PHPのmysqlにライブラリidiorm経由で接続したときSQLSTATEエラーが出たときの対処方法

PHP

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,
]);

これで正しく動作するようになりました。

めでたしめでたし。

最新情報をチェックしよう!