7.

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 本体が無い (極端な最小構成のとき)

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Fatal error: Maximum execution time of 30 seconds exceeded in...
  2. Fatal error: Uncaught Error: Cannot use object of type stdClass as array in ...
  3. Warning: Use of undefined constant ... - assumed '...' (this will throw an Error)
  4. ERROR: Call to undefined method Maatwebsite\Excel\Excel::load()
  5. Maximum execution time of 30 seconds exceeded
  6. Your requirements could not be resolved to an installable set of packages. ... To enable extensions, verify that they are enabled in your .ini files:
  7. could not find driver
  8. the requested PHP extension mbstring is missing from your system.
  9. the requested PHP extension dom is missing from your system.
  10. A non well formed numeric value encountered
  11. Warning: Cannot modify header information - headers already sent by ...
  12. php_network_getaddresses: getaddrinfo failed: Name or service not known
  13. XMLWriter::openUri(): Unable to resolve file path
  14. Object of class stdClass could not be converted to string
  15. Class 'Google_Service_Youtube' not found