ホーム>Laravel>'could not find driver'を解決する方法【Laravel】
Laravel

'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 / MariaDBpdo_mysql
PostgreSQLpdo_pgsql
SQLitepdo_sqlite
SQL Serverpdo_sqlsrv

config/database.phpmysql 設定を使っているのに pdo_mysql が入っていない、というケースがほとんどです。

原因の確認方法

まず、対象の拡張が読み込まれているか確認します。

php -m | grep pdo

pdo_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 php

Dockerの場合

Dockerfileで拡張を明示的にインストールする必要があるようです。

RUN docker-php-ext-install pdo_mysql

docker-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.3

dnfyumと違って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など、どのコネクションを使っているか)
  • .envDB_CONNECTION の値(パスワードなど機密情報は伏せる)
  • Dockerを使っている場合はDockerfileのPHPインストール部分
  • 本記事の解決方法のうちどれを試して、どうなったか(エラーメッセージが変わったかどうかも含めて)

特に「php -m の出力」と「実行環境」の2つは、この手のエラーの原因切り分けにほぼ必須です。

この2つだけでも先に伝えると回答の精度が大きく上がります。

まとめ

could not find driver は「PHP自体が動いていない」わけではなく、「接続先DBに対応したPDO拡張が足りていない」というケースがほとんどです。

php -m で入っている拡張を確認し、環境に合ったパッケージ名でインストール→サービス再起動、の流れで解決できます。

フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。