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

タイトル: could not find driver
SEOタイトル: PHP could not find driver (PDO) の原因と対処

この記事の要点
  • PHP の例外 PDOException: could not find driverPDO ドライバ未インストール / 未有効化
  • 原因 1: php-mysql / php-pgsql / php-sqlite3 等の拡張パッケージが未導入
  • 原因 2: php.iniextension=pdo_mysql がコメントアウト or extension_dir ミス
  • 原因 3: Web (Apache/Nginx) と CLI で php.ini が異なる → 両方確認
  • 確認は php -m | grep pdo、修正後は Apache/PHP-FPM 再起動

エラーメッセージ

PDOException: could not find driver
SQLSTATE[HY000] [2002] could not find driver

# Laravel
Illuminate\Database\QueryException
  could not find driver (SQL: select * from users)

# 例外スタック
PDO->__construct('mysql:host=...', ...) at PDO.php:0

PHP の PDO (PHP Data Objects) は本体 (pdo) と DB 毎のドライバ (pdo_mysql / pdo_pgsql / pdo_sqlite / pdo_sqlsrv) に分かれています。本体はあってもドライバが無いと、コネクション文字列のスキーム部分を解決できず「could not find driver」が出ます。

原因の切り分け

確認方法該当する場合の対処
ドライバがロードされているかphp -m | grep -i pdo不足ならパッケージ追加 (対処1)
PHP 拡張ファイル存在ls /usr/lib/php/*/pdo_mysql.so無ければ apt install php-mysql
php.ini で有効化php --ini + extension=pdo_mysqlコメント解除(対処2)
CLI と Web で別 iniphpinfo() の「Loaded Configuration File」両方確認(対処3)
DSN スキーム正しいか接続文字列の頭mysql: / pgsql: / sqlite:

対処1: ドライバパッケージのインストール

Ubuntu / Debian

# 自分の PHP バージョン確認
php -v
# PHP 8.2.x

# MySQL / MariaDB
sudo apt install -y php-mysql
# またはバージョン指定
sudo apt install -y php8.2-mysql

# PostgreSQL
sudo apt install -y php-pgsql php8.2-pgsql

# SQLite
sudo apt install -y php-sqlite3 php8.2-sqlite3

# SQL Server (Microsoft Drivers for PHP)
sudo apt install -y php-sqlsrv

# よくセットで使うもの
sudo apt install -y php-mysql php-curl php-mbstring php-xml php-zip php-bcmath

# 反映 (Apache or php-fpm)
sudo systemctl restart apache2
sudo systemctl restart php8.2-fpm

RHEL / Rocky / AlmaLinux

sudo dnf install -y php-mysqlnd php-pdo
# PostgreSQL
sudo dnf install -y php-pgsql
# SQLite
sudo dnf install -y php-sqlite3

# Remi 等のサードパーティリポを使う場合
sudo dnf module enable -y php:remi-8.2
sudo dnf install -y php-mysqlnd

sudo systemctl restart httpd
sudo systemctl restart php-fpm

Alpine (Docker)

FROM php:8.2-fpm-alpine
RUN apk add --no-cache \
        $PHPIZE_DEPS \
        oniguruma-dev libxml2-dev libpq-dev \
    && docker-php-ext-install pdo pdo_mysql pdo_pgsql mbstring xml

対処2: php.ini で有効化

パッケージは入っているが ini で extension がコメントアウトされている場合:

# どの php.ini が使われているか
php --ini
# Configuration File (php.ini) Path: /etc/php/8.2/cli
# Loaded Configuration File:         /etc/php/8.2/cli/php.ini
# Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
# Additional .ini files parsed:      /etc/php/8.2/cli/conf.d/20-pdo.ini, ...
; /etc/php/8.2/cli/conf.d/20-pdo_mysql.ini
extension=pdo_mysql

; Windows の場合
extension=php_pdo_mysql.dll
extension_dir = "C:\php\ext"

対処3: Web (Apache/Nginx) と CLI で ini が別物

これが地味に多い罠。CLI で php -m したら出るが、Web から叩くと「could not find driver」というケース:

# CLI 側
php -m | grep pdo
# pdo
# pdo_mysql        ← OK

# Web 側を info.php で確認
echo '<?php phpinfo();' | sudo tee /var/www/html/info.php
# ブラウザで http://server/info.php

# 探すべき項目:
#   Loaded Configuration File   /etc/php/8.2/apache2/php.ini   ← CLI と別!
#   PDO drivers                  (空 or mysql の有無)
#
# 終わったら必ず削除
sudo rm /var/www/html/info.php

Apache 用と CLI 用で conf.d が独立しているディストリ (Debian/Ubuntu の Apache MPM 構成) では、php-mysql インストール後に Apache や php-fpm を再起動しないと反映されません。

Docker でのよくあるハマり

# ❌ よくある誤り: pdo_mysql 入れ忘れ
FROM php:8.2-fpm
COPY . /app
# → 起動時に could not find driver

# ✅ 正しい
FROM php:8.2-fpm
RUN apt-get update &amp;&amp; apt-get install -y libzip-dev libpng-dev \
    &amp;&amp; docker-php-ext-install pdo_mysql zip gd

# Laravel Sail / 公式以外のイメージを使うときも同様

Laravel での確認手順

# .env 確認
cat .env | grep DB_
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# ...

# config/database.php の該当ドライバ
php artisan config:cache
php artisan tinker
> DB::connection()->getPdo();

# could not find driver が出たら php-mysql 未導入
# 「Connection refused」なら別問題 (DB 未起動 / FW)

SQLite を使うとき

# Laravel テストでよく使う
sudo apt install -y php-sqlite3

# .env
# DB_CONNECTION=sqlite
# DB_DATABASE=/absolute/path/database.sqlite

# ファイル作成
touch database/database.sqlite
php artisan migrate

Windows の場合

; php.ini (C:\php\php.ini)
extension_dir = &quot;C:\php\ext&quot;

; PDO ドライバ
extension=pdo_mysql
extension=pdo_pgsql
extension=pdo_sqlite
extension=mysqli

Apache 同梱の XAMPP / Laragon では、コントロールパネルで Apache 再起動が必須。IIS の場合は handler mapping と php-cgi.exe の場所を確認。

FAQ

Q: php -m では出るのに Web で出ない
A: Apache or php-fpm を再起動。CLI と Web で php.ini が別なケース多数。phpinfo() で「PDO drivers」項目を確認。

Q: composer require で解決できない?
A: PDO ドライバは PHP のネイティブ拡張なので Composer では入りません。OS パッケージマネージャで導入する必要があります。

Q: DSN を mariadb: にすべき?
A: MariaDB でも MySQL でも DSN は mysql:。PDO の MariaDB 専用ドライバは存在しません(互換)。