LAMP環境でLaravelを動かしてcould not find driver
が出た時に、解決した方法についてです。
LaravelからMySQLに接続したときに、ドライバーがないためエラーになっています。
環境
- CentOS 7.6
- Apache 2.4
- MySQL 5.7.27
- PHP 7.3.10
ドライバーを確認する
phpのモジュールにMySQLのドライバーが入っているか確認します。 PDOがSQLのドライバーにあたります。
$ php -m | grep pdo
pdo_sqlite
SQLite向けのドライバーしかありませんでした。 モジュールをまとめてインストールした際に、入れ忘れてたようです。
ドライバーをインストールする
MySQLのドライバーはphp-mysqlnd
ですので、これをインストールしていきます。
PHP7.3はremiリポジトリを使っていたため以下のコマンドでphp-mysqlnd
をインストールします。
$ sudo yum -y install --enablerepo=remi,remi-php73 php-mysqlnd
remiリポジトリを使っていない場合(PHP 5.x)以下のコマンドでインストールできると思います。
# バージョンを確認
$ sudo yum info php-mysqlnd
# インストール
$ sudo yum install php-mysqlnd
インストールしてpdo_mysql
が追加されています。
$ php -m | grep pdo
pdo_mysql
pdo_sqlite
この後、Apacheを再起動するとエラーが解消されていました。
おまけ:試行錯誤したときのログ
ドライバーがないことを知らず、パスが通ってないと考えていました。
php.ini
に拡張モジュールを指定できる設定があり、これを変更したときのWarning。
php.ini
にextension=php_pdo_mysql.so
を加えました。
$ php -m | grep pdo
PHP Warning: PHP Startup: Unable to load dynamic library 'php_pdo_mysql.so' (tried: /usr/lib64/php/modules/php_pdo_mysql.so (/usr/lib64/php/modules/php_pdo_mysql.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/php_pdo_mysql.so.so (/usr/lib64/php/modules/php_pdo_mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
pdo_mysql
存在しないモジュールを指定すると、こういった警告が出るようです。
php-mysqlnd
をインストールした後は、extension
をコメントアウトに戻しておきました。
PHPモジュールは/usr/lib64/php/modules/
にまとまっています。
【TypeScript】Jestでdescribeなどの関数がnot findになってるのを解消する
TypeScriptテストエラー解消schedule2021-10-10
【TypeScript】JestでインポートしたモジュールがCannot find moduleとなるエラー
TypeScriptテストエラー解消schedule2021-10-10