私は、Debian LennyをApache、MySQL、そしてPHPと一緒にインストールしたところで、PDOException could not find driver
を受け取りました。
これは、参照しているコードの特定の行です。
$dbh = new PDO('mysql:Host=' . DB_Host . ';dbname=' . DB_NAME, DB_USER, DB_PASS)
DB_Host
、DB_NAME
、DB_USER
、およびDB_PASS
は私が定義した定数です。プロダクションサーバ上で(そして私の以前のUbuntuサーバの設定上でも)うまく動作します。
これは私のPHPインストールと関係がありますか?
インターネットを検索しても役に立たなかった、私が得るのは専門家交換と例だけであるが、解決策はない。
Pdo_mysqlというモジュールが必要です。 phpinfo()で以下を探してください。
pdo_mysql
PDO Driver for MySQL, client library version => 5.1.44
あなたのコードの中のdsnはあなたがmysqlドライバと接続しようとしていることを明らかにします。エラーメッセージは、このドライバが利用できないことを示しています。
サーバーにmysqlエクステンションがインストールされていることを確認してください。
Ubuntu/Debianでは、次のようにしてパッケージをチェックします。
dpkg --get-selections | grep php | grep mysql
お持ちでない場合はphp5-mysqlパッケージをインストールしてください。
Ubuntu/Debianでは、次のものを使用できます。
Sudo apt-get install php5-mysql
Sudo apt-get install php7.0-mysql
最後に、それを動かすためには、Webサーバを再起動する必要があります。
Sudo /etc/init.d/Apache2 restart
Sudo /etc/init.d/nginx restart
更新 :新しいバージョンはphp-sqlite3
の代わりにphp5-sqlite
パッケージを使うべきです。あなたが最近のUbuntuバージョンを使っているのであれば、これを使ってください:
Sudo apt-get install sqlite php-sqlite3
質問に対する最初の回答はこちらです。
Sudo apt-get install sqlite php5-sqlite
Sudo /etc/init.d/Apache2 restart
Phpinfo()がpdo_sqlite行を表示していない場合(私の場合は私のUbuntuサーバー上)、上の行を実行するだけで十分です。
PHP 7.0がある新しいバージョンのUbuntuでは、php-mysql
パッケージを入手できます。
Sudo apt-get install php-mysql
その後、サーバーを再起動します。
Sudo service Apache2 restart
私のWindowsマシンでは、私はphp.iniで拡張子dirへの絶対パスを与えなければなりませんでした:
extension_dir = "c:\php5\ext"
私は同じ問題を抱えていました。解決策はOSによって異なります。私の場合、私はdebianを持っているので、それを解決するために:
Php-mysqlとphp7.0-mysqlをインストールしてください。
apt-get install php-mysql
apt-get install php7.0-mysql
php.ini
を/etc/php/7.0/Apache2/php.iniで編集しました
uncomment the line : extension=php_pdo_mysql.dll
次にApacheを再起動します。
service Apache2 restart
これは私の問題を解決します
Ubuntuでは実行するだけです
Sudo apt-get install php5-mysql
Sudo apt-get install php-mysql
ubuntuとPHP 7でうまくいった
これらをphp.iniに追加するときは、php_pdo.dll参照がdbドライバdllより前にあることを確認してください。そうしないと、このエラーメッセージも表示されます。このように追加してください。
[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
MySQLとドライバが正しくインストールされている場合、php.iniをチェックしましたか(phpinfo()で正しい場所をチェックしましたか?)。
CentOS
のPHP 5.5
の場合、php55-mysqlnd
パッケージをインストールすることでこれを修正しました。
Sudo yum -y install php55w-mysqlnd # For Webtatic
Sudo yum -y install php55u-mysqlnd # For Remi
インストールを助けるために、PHPのインストール方法に応じてコメントを書いてください。利用可能なリポジトリはwebtatic
とremi
です。
windows 8.1/10の場合:\\ php.iniファイル内の "extension = pdo_mysql"のコメントを外してください。
私が最後の日を過ごした理由は、次のようなエラーが出た理由です。私はUbuntu 14.04を実行しています。
問題:
私のPHP-CLIバージョンはphp7.0を実行していましたが、php_info()(Webバージョン)はphp 5.5.9を表示していました。 php_info()がpdoを有効にしたと言っても、コマンドライン(CLI)を使用してもpdo_mysqlコマンドが認識されませんでした。 mysqlは私の古いバージョンではなくCLIバージョンでは有効になっていました。私がしたのはphp7.0用にmysqlをインストールすることだけで、それは動作することができました。
これはうまくいったことです:
バージョンを確認するには:
php -v
Php7.0用にmysqlをインストールする
Sudo apt-get install php7.0-mysql
1)CLIのバージョンがWebのバージョンと同じであることを確認してください。
2)それらが異なる場合は、CLIバージョンにデフォルトとしてmysqlプラグインが付いていないことを確認してください。
mysqllnd
の代わりにmysql
を使用することを強くお勧めします。数の変換やビットタイプの評価がmysql
の拡張子を使用して問題を評価するような問題がたくさんあるからです。
次のコマンドでubuntuにmysqllnd
をインストールします。
Sudo apt-get install php5-mysqlnd
私の場合、DSN文字列が正しくありませんでした。具体的には、mysql://.
が含まれていませんでした。別のエラーメッセージが表示されます。
DSN文字列の先頭にmysql://
を追加することで問題は解決しました。
問題はmysqlライブラリに欠けているphpです。 CentOsでは、# yum install php-mysql
を実行してから# /bin/systemctl restart httpd.service
を付けてApacheを再起動することでそれを修正しました。名前はdebian/ubuntuベースのディストリビューション、php-> php5およびhttpd-> Apache2とは若干異なります。
Php設定ファイルのextension_dirが正しく設定されているか確認してください。いくつかの拡張をコメント/コメント解除し、それがphpinfo()に反映されているかどうかを確認してください。そうでない場合、php設定ファイルをロードすることができません(間違った場所)extension_dirがコメントされているか、間違った場所に設定されています。
モジュールがphp -m | grep pdo_mysql
で使用可能かどうかを確認してください。
そうでない場合、PHP 7.2の場合、Sudo apt install php7.2-mysql
を使用して関連パッケージをインストールできます。
他のPHPバージョンおよびパッケージマネージャーで同様のコマンドを使用します。
何人かの人々が始めるためにインターネットから例のコードをコピー/ペーストしているので確認するべきもう1つのこと。 MySQLがここに入っていることを確認してください。
... $dbh = new PDO ("mysql: ...
いくつかの例では、これは示しています
$dbh = new PDO ("dblib ...
私は別のphp.iniでテストを実行しているときに同じ問題を抱えていた。私は自分のphp.iniファイルにこれらの行を追加しなければなりませんでした:
[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so
お知らせ:まさにこの順番で
Phpinfo()のextension_dirで正しいパスを確認してください。
私はphp7パッケージをインストールするためにphp5パッケージを削除した後も同じ問題に直面しました(これにはすべてのドライバが含まれています)。私は実際にmysqlモジュールなしでphp7パッケージをインストールしました。
私は端末に入力してそれを解決することができました:
1)$ apt-cache search php7は、私が見つけたモジュールを見ながら、すべてのモジュールをリストします。
php7.0-mysql - PHP用MySQLモジュール
2)$ Sudo apt-get php7.0-mysqlをインストールする
それでおしまい。私のLinuxシステムではうまくいきました。
(適切なphpバージョンを使用してください、あなたはphp5であるかもしれません)
Debian 6でこの問題を修正しました。通常、php5-common
パッケージをインストールしたばかりです。インストール後、Webサーバーを再起動する必要があります(インストールしたサーバーに応じてApacheまたはnginx)。次に、ApacheプロセスID(lsof -p process_id
)で次のようにlsof
を実行します。
Sudo lsof -p 1399 #replace 1399 by your Apache process id
Apache2 1399 root mem REG 254,2 80352 227236 /usr/lib/php5/20090626/xmlrpc.so
Apache2 1399 root mem REG 254,2 166496 227235 /usr/lib/php5/20090626/suhosin.so
Apache2 1399 root mem REG 254,2 31120 227233 /usr/lib/php5/20090626/pdo_mysql.so
Apache2 1399 root mem REG 254,2 100776 227216 /usr/lib/php5/20090626/pdo.so
Apache2 1399 root mem REG 254,2 135864 227232 /usr/lib/php5/20090626/mysqli.so
上記を見るとわかるように、モジュールは不明なファイルパスまたは共通ライブラリパス/ usr/lib/php5/20090626/
にガイドされてインストールされます。ご使用のインストールでは異なる場合がありますが、pdo_mysql.so、pdo.so、mysqli.soのパスのみです。そのため、これがDrupalまたは他のphpエンジンがライブラリを見つけられず、そのエラーを示している理由です:PDOException: could not find driver
なぜこのような奇妙なパスにインストールされるのかわかりません。私にとっては、debian 6のライブラリパッケージインストールスクリプトのバグにすぎません。/usr/lib/php5/20090626/
の下のすべてのファイルのこのコマンドで/usr/lib/php5/
に:
ln -s /usr/lib/php5/20090626/* /usr/lib/php5/
Symfony2/3を使っていて、なぜこのエラーが出るのか疑問に思っている人のために。 "mapping_types"を使用している場合は、このエラーが発生する可能性があります。その理由は、 "mapping_types"が間違ったレベルに配置されているからです。例えば :
doctrine:
dbal:
mapping_types:
set: string
この「mapping_types」は、このレベルに配置する必要があります。
doctrine:
dbal:
#To counter the error caused by 'mapping_types'
connections:
default:
server_version: %database_server_version%
mapping_types:
set: string
これが役立つことを願っています
私はここで解決策を見つけました: https://github.com/doctrine/DoctrineBundle/issues/327
どこへ行っても、extension_dir
のパスをext
から絶対パスに変更する必要があることを読みました。それは私のために働きました。しかし、同僚のPCのサーバーを構築しようとしたとき、絶対パスではなく、値をext
にする必要がありました。
絶対パスを入力しても拡張子が見つからない場合は、絶対パスとext
の両方を試してみてください。
上記のすべての答えを読んでもまだうまくいかない場合は...
PHP PDO接続文字列が正しいことを確認してください。私の好きじゃない:
$dbh = new PDO('"mysql:Host=' . DB_Host . ';dbname=' . DB_NAME, DB_USER, DB_PASS)
エラーメッセージには、どのドライバが見つからなかったかに関する情報はありません。
考えられるすべてのPDOおよびMySQLライブラリを再インストールした後、私は接続文字列の先頭に " があることを知りました。
誤ったPHPのインストールが呼び出されていました
私は同じ問題を経験していました。そして、これが私と同じような問題を抱えている人に役立つことを願っています。
シナリオ
OS = Windows 10
Platform = XAMPP
PHP Version = 7 (Multiple Version seem to have been installed in the PC)
public
フォルダーにphpinfo.php
ファイルを作成し、phpinfo()
を実行して自分のphp.ini
ファイルの場所を探します。
PHP.iniの場所= c:\xampp\php\php.ini
問題 c:\xampp\htdocs> php -v
を呼び出すとPHP 7.2.3
が返されましたが、phpinfo.php
はPHP 7.2.2
を示していました。
解決策
電話をかける代わりに
php artisan migrate:install
これは私にこのエラーを与えた、私が使った
c:\xampp\php\php artisan migrate:install
そしてそれはうまくいった。
私の場合は、php-cliでPDOを使用していましたが、問題なく動作しました。
Apacheから接続しようとしたときに初めて、ドライバが見つからないという問題が発生しました。
簡単なapt-get install php-mysql
はそれを解決しました。 (Ubuntu 16.04/PHP7。クレジットは選択した回答とIvanのコメントに移動します)
それが役立つことを願っています。
仮想マシンに入るのを忘れたため、同じ問題がありました。次のようにローカルディレクトリに移動すると:
cd /www/Homestead/my_project
php artisan migrate
そのエラーが表示されます。しかし、それは私の仮想マシンで動作します
cd ~/Homestead
vagrant ssh
cd /www/Homestead/my_project
php artisan migrate
Linuxミント用
PhpBrew(5.5.9/7.0.14)を使用してPDO接続を作成しようとしているときに同じ問題がありました。
この記事の解決策のほとんどを試した後、私は次のことを行いました。
PhpBrewの電源を切った
Sudo apt-get install php7.0
を実行しました(Linux Mint 17.2/PHP7.0.16) - インストールされた新しいphpバージョン
PHP Fatal error: Uncaught PDOException: could not find driver
「apt install php-mysql php7toInfinityとsqlite-what-ever'sを忘れないで」に苦労し、苦労しましたが、基本に戻ってWebサイトのファイル許可をリセットするまでこのエラーメッセージを取り除くことができませんでした問題です。
これらの3つのコマンドは、Webサイト上のファイルとフォルダーのアクセス許可をリセットし、再び機能するようにしました。
cd /var/www/web-site-name.com/web/
# find (sub) directories and change permissions
find . -type d -exec chmod 755 {} \;
# find files and change permissions
find . -type f -exec chmod 664 '{}' \;
テストにsqliteを使っているなら、php sqlite pdo driveが必要です。以下のようにインストールすることができます。
Ubuntu 14.04の場合
Sudo apt-get install php5-sqlite
Sudo service Apache2 restart
Ubuntu 16.04にはphp5-sqlite
はありません
Sudo apt-get install php7.0-sqlite
Sudo service Apache2 restart
pdo_sqlite
を使用しようとしたときに同じ例外がありました。問題は、自動的に作成された20-pdo_sqlite.ini
および20-sqlite3.ini
シンボリックリンク(/etc/php5/mods-enabled
内)が破損していたことです。
壊れたシンボリックリンクを削除し、手動でそれらを追加する:
Sudo ln -s /etc/php5/mods-avaliable/pdo_sqlite.ini /etc/php5/mods-enabled/20-pdo_sqlite.ini
Sudo ln -s /etc/php5/mods-avaliable/sqlite3.ini /etc/php5/mods-enabled/20-sqlite3.ini
問題を修正しました。
注:
/etc/php5/mods-enabled
で設定を検索しなかったため、これは古いバージョンのphpでは機能しません。
$DB_TYPE = 'mysql'; //Type of database<br>
$DB_Host = 'localhost'; //Host name<br>
$DB_USER = 'root'; //Host Username<br>
$DB_PASS = ''; //Host Password<br>
$DB_NAME = 'database_name'; //Database name<br><br>
$dbh = new PDO("$DB_TYPE:Host=$DB_Host; dbname=$DB_NAME;", $DB_USER, $DB_PASS); // PDO Connection
これは私のために働きました。