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

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

新規登録して質問してみよう
ただいま回答率
85.42%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

1回答

7249閲覧

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

series207

総合スコア49

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2021/04/29 02:10

編集2021/04/30 09:14

#困っていること
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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/04/29 02:12

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

2021/04/29 02:13 編集

了解しました。
guest

回答1

0

ベストアンサー

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

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

投稿2021/04/29 02:13

m.ts10806

総合スコア80873

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

series207

2021/04/29 08:29

リンク先拝見しましたが、私のPCには「C:\Program Files」にApache系のフォルダが無く、「httpd.conf」もありません。 PC全体でも検索しましたがありません。
m.ts10806

2021/04/29 08:33

PHPの環境をどう構築したか次第です。
m.ts10806

2021/04/29 08:34

コマンド実行するだけならApacheは不要です。 Webサーバーなので、ブラウザから実行することを想定されています。 ただ「やること」は同じ。 PHPからsqliteが認識されていない(ドライバーの設定含む)ことが問題です。
series207

2021/04/29 10:55 編集

やることは同じということは、つまりどこかのパスが間違っている可能性が高いということですね。
m.ts10806

2021/04/29 11:02 編集

ブラウザで確認する=ApacheなどWebサーバーが稼働している ということになります。 iniやconfなど設定ファイルはサーバー起動時に読み込まれるので 変更した場合はWebサーバーの再起動が必要です。 また、PHPからではなくcmdからのコマンド実行で結構ですが、sqlite3はコマンドで実行できてますか?
m.ts10806

2021/04/29 11:03

あとextensionを追加するのは良いですが、ライブラリ(lib内かなたぶん)として導入、設置されてなければ再起動時にエラーが出ると思います。
series207

2021/04/30 01:49

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

2021/04/30 09:25 編集

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

2021/04/30 09:31

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問