FuelPHPのDB操作で「mysqli::mysqli(): (HY000/2002): そのようなファイルやディレクトリはありません」が出た件
FuelPHPのマイグレーションを実行しようとしたら、次のエラーが出て失敗したので、その時の対処法を残しておきます。
$ oil refine migrate caught exception Fuel\Core\Database_Exception: mysqli::mysqli(): (HY000/2002): そのようなファイルやディレクトリはありません
環境
vagrant上に環境構築 php : 5.6.25 fuelphp : 1.8 mysql : 5.6.33
対応
エラーメッセージで検索すると、mysql.sockがphp.iniに指定していないと起こる、とのことだったので、指定してみます。
php.iniの編集前(no valueになっている) $ php --ri mysqli mysqli.default_socket => no value => no value mysql.sockの場所を確認し、下のように編集 $ vim /home/vagrant/.phpenv/versions/5.6.25/etc/php.ini mysqli.default_socket = /var/lib/mysql/mysql.sock 改めて確認 $ php --ri mysqli mysqli.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock マイグレーションを実行 $ oil r migrate Performed migrations for app:default: 001_create_form
mysql.sockを指定してもダメな場合もあるようです、今回はうまくいったので良かったです。
他のハマりポイントとしては、fuel/app/config/db.php
にてmysqliとPDOで記述が若干異なるため、間違えると上手く動かないようです。
# PDOの場合 return array( 'default' => array( 'type' => 'mysqli', 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_dev' 'username' => 'username', 'password' => 'password', ), ), );
# mysqliの場合 return array( 'default' => array( 'type' => 'mysqli', 'connection' => array( 'hostname' => 'hostname', 'username' => 'username', 'password' => 'password', ), ), );
参考にさせていただきました!