PDOでSQLite3と接続すると、「could not find driver」と表示されるときに確認したこと


環境

  • Windows 10
  • PHP 7.2.11
  • Apache 2.4.39
  • SQLite 3.27.2

現象

  1. PDO を使ってデータベースに接続、データを取得する処理を記述
  2. ブラウザから該当ファイルにアクセスすると、could not find driver と表示される

原因

パスが間違っていました...

やったこと

1.事前に

アプリケーションから SQLite を利用するためには sqlite3.dll を利用しなければならないようなので、サイトからダウンロードしてきて C:¥Windows¥System32 に配置しました。
さらに、php.ini の下記の記述のコメントアウトを外して有効化しました。(なければ追記)

php.ini
extension=php_pdo.dll
extension=php_sqlite.dll

そしてブラウザからアクセスすると、could not find driver (ドライバが見つからない)と言われてしまうのでした。

2.phpinfo を確認

以下のように、 PDO driversno value となっています。

3.extension_dir を絶対パスにする

extension フォルダの指定を絶対パスにすると、拡張モジュールをきちんと読み込んでくれるっぽいので、

php.ini
extension_dir = "ext"

php.ini
extension_dir = "C:/php-7.2.11/ext"

と修正したが、現状は変わらず。

4.再度 phpinfo を確認

記載されている extension_dir のパスが、先ほど指定したものと違うことに気づく。

本当は C:/php-7.2.11/ext を参照してほしいのだが、C:/php/ext を参照している。(C:/php/ext というフォルダは存在しない)

5.httpd.conf を確認

どこかに C:/php/ext を参照する、という記述があるはず。
調査してみると、Apache の設定ファイルに以下の記述を発見。

httpd.conf
PHPIniDir "C:/php"

これを以下に変更。

httpd.conf
PHPIniDir "C:\php-7.2.11\ext"

6.Apache を再起動

再起動すると、変更したパスがきちんと反映され、ドライバも表示 (SQLiteが追加)されている。

最初は「php」というフォルダ名でインストールしたが、後から「php-7.2.11」と名前を変更した微かな記憶がよみがえる...

最後に

エンジニア歴1年の初心者が、初心者の方の出助けになればと思い、記事を書いています。
間違いがあれば、忌憚なくご指摘いただけると嬉しいです。

参考