'could not find driver'を解決する方法【Laravel】
Laravelで'could not find driver'とエラーが出る原因と、環境別(Amazon Linux/Ubuntu/macOS/Docker)の解決方法についてまとめました
エラー文
Illuminate\Database\QueryException
could not find driver (Connection: mysql, SQL: ...)php artisan migrate や DBへの初回アクセス時など、データベースに接続しようとしたタイミングで発生します。
原因
このエラーは、PHPに PDO(PHP Data Objects)のデータベースドライバが入っていない、または有効になっていないときに出ます。
Laravelは内部的にPDOでDB接続するため、php本体だけでなく、接続先DBに対応した拡張が別途必要です。
| 接続先DB | 必要な拡 張 |
|---|---|
| MySQL / MariaDB | pdo_mysql |
| PostgreSQL | pdo_pgsql |
| SQLite | pdo_sqlite |
| SQL Server | pdo_sqlsrv |
config/database.php の mysql 設定を使っているのに pdo_mysql が入っていない、というケースがほとんどです。
原因の確認方法
まず、対象の拡張が読み込まれているか確認します。
php -m | grep pdopdo_mysql のような接続先に対応した項目が出てこなければ、それが原因です。
CLIとWebサーバー(php-fpmなど)で使っているPHPが別物というケースもあるので、Webサーバー経由でも確認したい場合は phpinfo() を出力して確認するのが確実です。
解決方法(実際に解決した方法)
私はAmazon Linux 2023 (dnf) 環境でこのエラーに遭遇し、php-mysqlnd を追加インストールして解決しました。
sudo dnf install -y php-mysqlnd参考:他の環境の場合
原因は環境によらず共通(PDOドライバの不足)なので、他の環境でも対応するパッケージを入れれば同様に解決できるはずです。
私自身は試していませんが、調べたところ以下のような方法があるようです(MySQL以外に接続する場合は mysql の部分を pgsql などに置き換えてください)。
Ubuntu / Debian系(apt)の場合
apt install -y php-mysql で同様に解決できるようです。
sudo apt install -y php-mysqlバージョン別のパッケージ(php8.3-mysql など)が必要になることもあるらしいので、php -v で確認したバージョンに合わせると良さそうです。
macOS(Homebrew)の場合
Homebrewの php パッケージは通常 pdo_mysql を同梱しているそうですが、php -m に出てこない場合は再インストールで直ることが多いとのことです。
brew reinstall phpDockerの場合
Dockerfileで拡張を明示的にインストールする必要があるようです。
RUN docker-php-ext-install pdo_mysqldocker-php-ext-install が使えるのは公式PHPイメージ(php:*-fpm など)の場合とのこと。
ベースイメージが違う場合はディストリビューションに合わせて上記のパッケージインストールコマンドを使うと良さそうです。
インストール後にやること
パッケージを入れただけでは反映されないことがあります。
- php-fpm / Apache / Nginxを再起動する
sudo systemctl restart php-fpm php.iniで該当拡張が;extension=pdo_mysqlのようにコメントアウトされていないか確認する- Dockerの場合はコンテナを再ビルドする(イメージのキャッシュが残っていると反映されないことがある)
再起動後にもう一度 php -m | grep pdo で確認し、対象のドライバが表示されればOKです。
経緯
AWS EC2 (Amazon Linux 2023) で Laravel プロジェクトをデプロイしている際に、次のコマンドを実行したところ本記事冒頭のエラーが発生しました。
php artisan migrate事前にPHP本体のインストールとして、以下のコマンドだけ打っていました。
sudo dnf install -y php8.3dnfはyumと違って1つコマンドを打つだけで関連パッケージを自動的に入れてくれるように見えるログが流れるため、これだけで完了したと思い込んでいましたが、実際にはMySQL用のPDOドライバ(php-mysqlnd)は別パッケージとして入れる必要がありました。
sudo dnf install -y php-mysqlndを追加で実行し、php-fpmを再起動したところ解決しました。
AIチャットに質問する際に添付すると良い情報
コマンドを実行できないAIチャット(ChatGPT・Claude chatなど)に質問する場合、以下の情報を貼り付けて質問すると、的確な回答が得やすくなります。
- エラーメッセージ全文(スタックトレースも含めて省略せずに)
php -vの出力(PHPのバージョン)php -mの出力(有効になっている拡張の一覧。特にpdo_*部分)- 実行環境(OS名・バージョン。Amazon Linux 2023 / Ubuntu 22.04 / macOS + Homebrew / Docker など)
config/database.phpの該当DB接続部分(mysql/pgsqlなど、どのコネクションを使っているか).envのDB_CONNECTIONの値(パスワードなど機密情報は伏せる)- Dockerを使っている場合はDockerfileのPHPインストール部分
- 本記事の解決方法のうちどれを試して、どうなったか(エラーメッセージが変わったかどうかも含めて)
特に「php -m の出力」と「実行環境」の2つは、この手のエラーの原因切り分けにほぼ必須です。
この2つだけでも先に伝えると回答の精度が大きく上がります。
まとめ
could not find driver は「PHP自体が動いていない」わけではなく、「接続先DBに対応したPDO拡張が足りていない」というケースがほとんどです。
php -m で入っている拡張を確認し、環境に合ったパッケージ名でインストール→サービス再起動、の流れで解決できます。




