#困っていること
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 ・app ・class ・index.php ・error.php ・db ・eldb.sqlite3
「Desktop」の中に「WORK_DIR」、その中に「app」、その中に「class」「db」があり、「class」の中に「index.php」「error.php」、「db」の中に「eldb.sqlite3」があります。
・C ・Users ・Username ・php ・php.ini ・dev ・ext ・phpinfo.php(phpinfo関数の入っているファイル) ・extras ・div
「php」フォルダの中に「php.ini」「exeフォルダ」、exeフォルダの中にphpinfo関数の入っているファイルである「phpinfo.php」があります。
#該当のソースコード
コードを公開するにあたって、本来であればエラーに直接関係ない箇所も一切省略せず全て提示するのがマナーですが、「index.php」については、コードの中にかなり個人情報が含まれており、かつ修正にも膨大な時間を要するため、全体をお見せすることができません。
ここでは、「error.php」に飛ぶ箇所のみ公開します。
##index.php (一部)
PHP
1<?php 2try { 3 4} catch (PDOException $e) { 5 error_log("PDOException: " . $e->getMessage()); 6 header("Location: error.php"); 7 exit(); 8}
「 error_log("PDOException: " . $e->getMessage());」で今回のエラー「could not find driver」を出力します。
##error.php
PHP
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>PHP DB</title> 6</head> 7<body> 8 <h3>Class - Error</h3> 9 <hr> 10 <a href="index.php">BACK</a> 11</body> 12</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
回答1件
あなたの回答
tips
プレビュー