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

  • 2021年2月18日
  • PHP
  • 7view
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,
]);

 

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

めでたしめでたし。

 

 

 

最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG