めもめも のーと

ハマったこととか、覚えたこととか

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


参考にさせていただきました!

kimagureneet.hatenablog.com