タイトル: 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 |
使いたい DSN 接頭辞 (例: mysql) が出力に含まれていれば OK です。出ない場合はインストール/有効化が必要です。
2. ドライバをインストール
| 環境 | MySQL 用 PDO | PostgreSQL 用 | SQLite 用 |
|---|---|---|---|
| Debian / Ubuntu | sudo apt install php-mysql | sudo apt install php-pgsql | sudo apt install php-sqlite3 |
| RHEL / Rocky / Alma | sudo dnf install php-mysqlnd | sudo dnf install php-pgsql | sudo dnf install php-pdo |
| Alpine | apk add php82-pdo_mysql | apk add php82-pdo_pgsql | apk 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 |
php-fpm を再起動しないと、コマンドラインだけで拡張が見える状態のまま Web 側で改善しません。
4. phpinfo で確認
Web から見える php.ini を切り分けるため、<?php phpinfo(); ?> を一時設置して、Loaded Configuration File / Additional .ini files / 該当ドライバ (pdo_mysql 等) のセクション存在を確認します。確認後は必ず削除します。
5. DSN を再確認
|
$pdo = new PDO( |
- 先頭の
mysql:等をタイプミスしていないか PDO::getAvailableDrivers()に含まれるドライバ名と一致しているか
Docker環境での例
|
FROM php:8.3-fpm-alpine |
関連エラー
SQLSTATE[HY000] [2002] Connection refused— ドライバはあるが DB に到達できないSQLSTATE[HY000] [1045] Access denied for user— 認証エラーClass 'PDO' not found— PDO 本体が無い (極端な最小構成のとき)
関連
- 親カテゴリ: エラー一覧 (PHP)
- 関連: PHP / MySQL/MariaDB