webとvscodeが実行してるPHPが異なってる可能性が高いような気がする
PHP WEB上ではPDOが正常に機能しているが、Vs codeのターミナルでは could not find driverエラーが起きて使用できない。
解決したいこと
PHP初心者です。
phpでmysqlを使ってみようと思い、pdoを動かすのに必要なpdoドライバーをインストールしましたが,
ターミナルでドライバーがインストールされていないとエラーが起きてしまい動きません。
web上ではしっかりとmysqlとphpを連携できて表示されます。
VS codeでxamppを使おうとwindowsで使用しております。
解決方法を教えてください。
発生している問題・エラー
Fatal error: Uncaught PDOException: could not find driver.
該当するソースコード
PHP
<?php
$dsn ="mysql:host=localhost;dbname=newapp;charset=utf8mb4";
$user ="ユーザー名";
$pass ="パスワード";
$pdo = new PDO(
$dsn,
$user,
$pass,
);
$stmt = $pdo->query('SELECT * FROM users ORDER BY id ASC');
$users = $stmt->fetchAll();
var_dump($users);
?>
自分で試したこと
1.php.iniで以下の項目の;を外しました。
extension_dirは設定しています。
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_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
xamppを再起動し、vs codeのターミナルで確認してもエラーコードが表示されてしまいました。
2.phpinfoで確認すると、pdoを動かすために必要なドライバーはしっかり反映されています。
3.ターミナルでphp -mを使用し確認すると、以下のように表示されます。(ここにドライバーが反映されていない?)
[PHP Modules]
bcmath
calendar
Core
ctype
date
dom
filter
hash
iconv
json
libxml
mysqlnd
pcre
PDO
Phar
readline
Reflection
session
SimpleXML
SPL
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]
ここでなにが反映されているべきなのかがよく分かりません。vs codeを再起動してみても結果は変わりませんでした。
4.php.iniを再作成してみました
php.iniに余計なことをしてしまったのではないかと再作成しました。
phpinfoでは必要なドライバーが表示され、web上ではpdoが機能しますが、ターミナルではエラー。改善されませんでした。
3Answer
Comments
@opo6248
Questioner異なっておりました...ありがとうございます。
ターミナルでphp -mを使用し確認
どのような構成か分かりませんが、FCGI(or モジュール版)とコマンドライン版では動作が異なるケースがあります。
どちらにしても、php.ini
のあるディレクトリorパスを名確に指定したほうが良いでしょう。
コマンドならオプション-c "<パス>"
で指定します。オプションについては下記参照。
Comments
@opo6248
Questioner別のphpファイルのパスを通しておりました。解決できました。
ありがとうございます。
あぁ、神様。ありがとうございます。
xamppに元から入っているphpとは別に、別のphpファイルをpcにインストールしていました。
1.別にインストールしてしまった。phpファイルを消去
2.環境変数からphpパスをxamppのphpパスに変更。
これでコマンドラインでも使用できるようになりました。
パスの意味をよく理解していませんでした...。基礎を大事にします。
回答してくださった方々、本当にありがとうございました。