single.php

PHPからMySQL 8.0へPDOで接続時に[could not find driver]になる場合の対処法

Windows環境で、PHPからMySQLにPDO経由で接続する場合に、[could not find driver]が表示される場合には、設定ファイルの”extension_dir”と”extension”を確認すると改善されます。

PDOException

PHPからMySQLなどのデータベースに接続する際は、PDO経由で接続する方法が推奨されています。PHPをセットアップ時に、各データベース用のドライバーがコピーされているので、使わない理由がありません。

データベース接続時のエラーを受け取らないと、エラーの原因を特定する必要があるので通常はPDOExceptionで例外を検出します。

<?php try { $pdo = new PDO('mysql:host=localhost;dbname=db', 'administrator', 'password', array(PDO::ATTR_EMULATE_PREPARES => false));
  } catch (PDOException $e) {
     exit('データベース接続失敗。'.$e->getMessage());
    }
?>

ドライバが見つからない

例外メッセージとして[could not find driver]が検出された場合には、PDOで接続するためのドライバーの設定が入っていないことが考えられます。

WindowsにPHPをセットアップしている場合には、既定値がオフになっているため「PHP.ini」を編集する必要があります。

PHPをセットアップしたフォルダー内の[php.ini]をメモ帳などで開いて、次の2カ所を確認して編集します。

1カ所目は、extension_dirを検索して

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
; extension_dir = "ext"

コメントを外して、extension_dirを有効にします。こんな感じ

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "ext"

2カ所目は、extension=pdo_mysqlを検索して

; Notes for Windows environments :
;
; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+)
;   extension folders as well as the separate PECL DLL download (PHP 5+).
;   Be sure to appropriately set the extension_dir directive.
;
; extension=pdo_mysql

コメントを外して、extension=pdo_mysqlを有効にします。こんな感じ

; Notes for Windows environments :
;
; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+)
;   extension folders as well as the separate PECL DLL download (PHP 5+).
;   Be sure to appropriately set the extension_dir directive.
;
extension=pdo_mysql

設定が分かりやすい様に省略していますが、実際は、他データベース用のドライバ設定が項目がたくさん記載されてます。

PHPの設定を反映(Webサーバーの再起動など)して、エラーが改善されれば変更完了です。

Webサーバーの再起動

PHP側の設定を変更しても、すぐには反映されません。Webサーバーを再起動する必要があります。

Windows用のIISを利用している場合には[アプリケーション プール]を再起動(停止して開始)してもPHPの設定が反映されます。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です