質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.51%

「could not find driver」というエラーが解決できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 500

score 41

困っていること

VSCodeでローカルサーバを立ち上げてPHPで作成したwebアプリを実行しているのですが、「PDOException: could not find driver」というエラーが出て実行できません。

PS C:\Users\username\Desktop\WORK_DIR\app> php -S localhost:8000
[Thu Apr 29 10:30:57 2021] PHP 8.0.3 Development Server (http://localhost:8000) started
[Thu Apr 29 10:31:10 2021] [::1]:49713 Accepted
[Thu Apr 29 10:31:10 2021] [::1]:49714 Accepted
[Thu Apr 29 10:31:10 2021] PDOException: could not find driver
[Thu Apr 29 10:31:10 2021] [::1]:49713 [302]: GET /class/index.php
[Thu Apr 29 10:31:10 2021] [::1]:49713 Closing
[Thu Apr 29 10:31:10 2021] [::1]:49714 [200]: GET /class/error.php
[Thu Apr 29 10:31:10 2021] [::1]:49714 Closing
[Thu Apr 29 10:31:10 2021] [::1]:49717 Accepted
[Thu Apr 29 10:31:10 2021] [::1]:49717 [404]: GET /favicon.ico - No such file or directory
[Thu Apr 29 10:31:10 2021] [::1]:49717 Closing


※「No such file or directory」というエラーも出ていますが、とりあえず上のエラーから解決しようと思います。こちらのエラーについても分かる人は回答してください。
※「could not find driver」解決後も「No such file or directory」が解決しない場合は、また別質問で投稿する予定です。

フォルダ構成

・Desktop
    ・WORK_DIR
        ・appclass
               ・index.php
               ・error.php
        ・db
            ・eldb.sqlite3

「Desktop」の中に「WORK_DIR」、その中に「app」、その中に「class」「db」があり、「class」の中に「index.php」「error.php」、「db」の中に「eldb.sqlite3」があります。

CUsersUsernamephpphp.inidevextphpinfo.phpphpinfo関数の入っているファイル)
        ・extrasdiv


「php」フォルダの中に「php.ini」「exeフォルダ」、exeフォルダの中にphpinfo関数の入っているファイルである「phpinfo.php」があります。

該当のソースコード

コードを公開するにあたって、本来であればエラーに直接関係ない箇所も一切省略せず全て提示するのがマナーですが、「index.php」については、コードの中にかなり個人情報が含まれており、かつ修正にも膨大な時間を要するため、全体をお見せすることができません。

ここでは、「error.php」に飛ぶ箇所のみ公開します。

index.php (一部)

<?php
try {

} catch (PDOException $e) {
    error_log("PDOException: " . $e->getMessage());
    header("Location: error.php");
    exit();
}


「 error_log("PDOException: " . $e->getMessage());」で今回のエラー「could not find driver」を出力します。

error.php

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>PHP DB</title>
</head>
<body>
  <h3>Class - Error</h3>
  <hr>
  <a href="index.php">BACK</a>
</body>
</html>

試したこと

SQLiteインストール

Windowsダウンロードページからsqlite-tools-win32-x86-3xxxxxx.zip ファイルをダウンロード
・ダウンロードした sqlite-tools-win32-x86-3330000.zip ファイルを解凍し、環境変数PATH の設定されているフォルダに本ファイルを配置すればインストール完了

コマンド入力

PDOで could not find driver が出たときで書かれていることを試しました。

まず、コマンドプロンプトで「php -m | grep pdo」を入力しましたが、コマンド「grep」が認識されていません。

PS C:\Users\Username\Desktop\WORK_DIR\app> php -m | grep pdo
grep : 用語 'grep' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されてい
ることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:10
+ php -m | grep pdo
+          ~~~~
    + CategoryInfo          : ObjectNotFound: (grep:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

次に、「yum install --enablerepo=remi,remi-php72 php-mysql」を入力しましたが、「yum」も認識されません。

PS C:\Users\Username\Desktop\WORK_DIR\app> yum install --enablerepo=remi,remi-php72 php-mysql
yum : 用語 'yum' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されている
ことを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:1
+ yum install --enablerepo=remi,remi-php72 php-mysql
+ ~~~
    + CategoryInfo          : ObjectNotFound: (yum:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


また、こちらのサイトにあるphp.iniの編集を行い、Laravelで"could not find driver"が出たときの対処法では、「extension=php_pdo_mysql.dll」をコメントアウトしなさいとのことですが、メモ帳の検索機能で「extension=php」で検索しましたが、見つかりません。

extension=php・・・の追加

「php.ini」に「extension=php_pdo.dll」「extension=php_sqlite.dll」がなかったので、一番下に追記しました。

[ffi]
; FFI API restriction. Possible values:
; "preload" - enabled in CLI scripts and preloaded files (default)
; "false"   - always disabled
; "true"    - always enabled
;ffi.enable=preload

; List of headers files to preload, wildcard patterns allowed.
;ffi.preload=
extension=php_pdo.dll
extension=php_sqlite.dll

「extension_dir」を絶対パスに変更

「extension_dir」のパスを「.\」から「C:\php\exe」に変更しました。
![

phpinfoでの表示

「extention_dir」のパスはメモ帳で更新した通りになっています。

「PDO drivers」はmySQLのみで、SQLiteはありません。

関連する質問

インストールの過程で試したことについては私の過去質問をご覧ください。(自己解決済)

バージョン情報

VSCode
PHP8.0

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2021/04/29 11:12

    yumもgrepもLinux系OSのコマンドです。
    Windowsを検索条件に入れて探してください。

    キャンセル

  • series207

    2021/04/29 11:13 編集

    了解しました。

    キャンセル

回答 1

checkベストアンサー

0

yumもgrepもLinux系OSのコマンドです。
Windowsを検索条件に入れて探してください。 

いずれにしても必要な設定がなされていないときに出るエラーです。
PDOでSQLite3と接続すると、「could not find driver」と表示されるときに確認したこと

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/04/30 10:49

    sqlite3コマンドは普通に認識されていますし、データベースを操作することは普通にできます。
    その他詳しいことは後ほど質問文に追記します。

    キャンセル

  • 2021/04/30 18:25 編集

    「extension=php_pdo_sqlite.dll」を追加していなかったことが原因でした。
    「extension=php_sqlite.dll」と混同しており、追加したものと勘違いしていました。
    色々教えてくださりありがとうございます。

    キャンセル

  • 2021/04/30 18:31

    確かにPDOから利用するなら必要ですね(混同する人は多いです)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る