DB接続時にPDOでcould not find driverが出た時の対処方法

DB接続時にPDOでcould not find driverが出た時の対処方法
f:id:AoiKugayama:20200722120130p:plain

この記事に辿り着いた方は、PHPでMySQLなどにPDOを使用して接続をする時に、「could not find driver」のエラーが出ているのではないでしょうか?

今回は「could not find driver」が出た時の調査方法と解消方法を紹介していきます。

私の環境ではある時、ローカル環境でテストを行っていた時にデータを取ってこなくなった。
その際にtry-catch(トライキャッチ)でエラーメッセージをアウトプットさせてみた内容が下です。

f:id:AoiKugayama:20200722130845p:plain

出ましたね、「could not find driver」。

could not find driverのエラーとは?

これば、必要なドライバーがみつからないと云うメッセージ。
今回はPDO ExceptionということでPDOドライバーが無いと云うことがわかる。

解決方法

環境確認

まず、現状の環境を確認しましょう。
phpinfoからPDOののドライバーを確認する。

phpinfoの確認方法はこちらから解説してます。

sqlite3ドライバの確認(PHP) | ガンマソフト株式会社

上記の画像のように使用しているDBのmysqlが入っていれば正常です。
既に更新してしまっている画像なので正常値ですが、確認時は「no value」の表示になっていました。

PDOドライバーはPHP5.1.0以降ではデフォルトで有効になっているはずなのですが、何かの表示にいじってしまったのかも知れない。

さて、対応した方法についてですが、自分はWindousユーザーの為Windows用の対応を記載させてもらいます。

PDOを含む各種ドライバーは基本的に、共有モジュールとしてPHPに同梱されている
そのためphp.iniファイルを操作するだけで、使用するorしないが変更出来る。

この後php.iniを編集しますがバックアップを忘れずに。
変更後問題が起きたら戻せるようにコピーを取っておきましょう!

対応1

それではまずphp.iniを開きます。
php.iniの場所がわからない場合は、ちょうど開いているphpinfoページから確認できます。

php.ini

extension=php_pdo.dll

php.iniを開いたら、この行を探して下さい。
「ctrl+F」ショートカットの検索機能を使うと簡単ですね。

この行は「;」セミコロンが先頭についていてコメントアウトになっているのでこれを消して有効にしてあげます。


ここで念のために、一旦保存をしましょう。

対応2

php.ini

extension=php_pdo.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_informix.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll

再度「ctrl+F」ショートカットの検索機能を使って「extension=php_pdo.dll」を探してみましょう。

php_Pdo.dllに続いて、その他のデーターベース固有のdLLが並んでいます。
使用したいpdoのコメントアウトを外します。

例えば、pdo_mysqlの場合、「extension=php_pdo_mysql.dll」これだけコメントアウトを外しましょう。

ここで注意するのが、上記で指定したdLLはextension_dirにある必要があります。
phpinfoでパスを確認することができますね。


変更したら保存をして完了です。
php.iniを閉じましょう。

対応3

最後にPHPを再起動してあげると完了です。

どうでしょう。エラー消えてますか?

まとめ

今回は、PHPでデータベースを操作する際に使用するPDOに関するエラー「could not find driver」について、その原因と対応方法について解説しました。

  • 現状の環境を確認する(phpinfoからPDOのドライバーを確認する)
  • PDOドライバーが無効になっている場合、php.iniファイルを編集する
    • 「;extension=php_pdo.dll」を「extension=php_pdo.dll」に変更する
    • 他のデータベース固有のDLLを指定する(php.ini内でextension_dirを設定する必要がある)
  • PHPを再起動する

プログラミング中、誰かへ相談したいことはありませんか?

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのがオンラインプログラミング学習サービス(侍エンジニア)です。
月額2,980円から学べて、現役エンジニアとオンラインで相談できるほか、
回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

公式サイトからご入会いただくと、お得な割引クーポンを利用できるので、気になる方はぜひ詳細をご覧ください。

IT企業勤務でブラックな会社の人は、未払金を勝ち取った記事で方法紹介してます👇

Databaseカテゴリの最新記事