この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:atom
更新日時:2026-06-10 10:22:51

タイトル: could not find driver

エラー内容

SQLSTATE[HY000] [2002] could not find driver

発生条件

  • PHP の PDO でデータベース接続しようとしたときに発生
  • Laravel / Symfony / 素の PDO どの環境でも起こりうる
  • たいていは「PDO 用のドライバ拡張がインストールされていない」状態

原因

原因解説
該当 PDO ドライバ拡張が無いMySQL なら pdo_mysql、PostgreSQL なら pdo_pgsql、SQLite なら pdo_sqlite が必要
php.ini で extension が無効インストール済みだが ;extension=pdo_mysql のようにコメントアウト
CLI と Web で php.ini が違うphp -m で見えても、Web (php-fpm / mod_php) 側に拡張が読み込まれていない
Docker イメージに拡張が含まれない素の php:8.x-fpm 系は最小構成。docker-php-ext-install で追加が必要
DSN のドライバ名が不正mysq:...(タイプミス)や、想定と違うドライバを指定している
PHP のバージョン差OS 標準パッケージのバージョンが PHP 本体と合っていない

対処手順

1. 読み込み済みドライバを確認する

php -m | grep -i pdo
php -r "print_r(PDO::getAvailableDrivers());"

使いたい DSN 接頭辞 (例: mysql) が出力に含まれていれば OK です。出ない場合はインストール/有効化が必要です。

2. ドライバをインストール

環境MySQL 用 PDOPostgreSQL 用SQLite 用
Debian / Ubuntusudo apt install php-mysqlsudo apt install php-pgsqlsudo apt install php-sqlite3
RHEL / Rocky / Almasudo dnf install php-mysqlndsudo dnf install php-pgsqlsudo dnf install php-pdo
Alpineapk add php82-pdo_mysqlapk add php82-pdo_pgsqlapk add php82-pdo_sqlite
Docker (php image)docker-php-ext-install pdo_mysql (Dockerfile に追記)
Windows (php.ini);extension=pdo_mysql のセミコロンを外す

3. Webサーバを再起動する

sudo systemctl restart php-fpm
sudo systemctl restart apache2    # mod_php 利用時
sudo systemctl restart nginx       # php-fpm 経由のとき

php-fpm を再起動しないと、コマンドラインだけで拡張が見える状態のまま Web 側で改善しません。

4. phpinfo で確認

Web から見える php.ini を切り分けるため、<?php phpinfo(); ?> を一時設置して、Loaded Configuration File / Additional .ini files / 該当ドライバ (pdo_mysql 等) のセクション存在を確認します。確認後は必ず削除します。

5. DSN を再確認

$pdo = new PDO(
    'mysql:host=db;dbname=app;charset=utf8mb4',
    'user', 'pass'
);

  • 先頭の mysql: 等をタイプミスしていないか
  • PDO::getAvailableDrivers() に含まれるドライバ名と一致しているか

Docker環境での例

FROM php:8.3-fpm-alpine

RUN apk add --no-cache $PHPIZE_DEPS \
  && docker-php-ext-install pdo_mysql

関連エラー

  • SQLSTATE[HY000] [2002] Connection refused — ドライバはあるが DB に到達できない
  • SQLSTATE[HY000] [1045] Access denied for user — 認証エラー
  • Class 'PDO' not found — PDO 本体が無い (極端な最小構成のとき)

関連