it-swarm-ja.com

PDOException「ドライバが見つかりませんでした」

私は、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_HostDB_NAMEDB_USER、およびDB_PASSは私が定義した定数です。プロダクションサーバ上で(そして私の以前のUbuntuサーバの設定上でも)うまく動作します。

これは私のPHPインストールと関係がありますか?

インターネットを検索しても役に立たなかった、私が得るのは専門家交換と例だけであるが、解決策はない。

249
Mike Moore

Pdo_mysqlというモジュールが必要です。 phpinfo()で以下を探してください。

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44
208
ZZ Coder

あなたのコードの中のdsnはあなたがmysqlドライバと接続しようとしていることを明らかにします。エラーメッセージは、このドライバが利用できないことを示しています。

サーバーにmysqlエクステンションがインストールされていることを確認してください。

Ubuntu/Debianでは、次のようにしてパッケージをチェックします。

dpkg --get-selections | grep php | grep mysql

お持ちでない場合はphp5-mysqlパッケージをインストールしてください。

Ubuntu/Debianでは、次のものを使用できます。

  • PHP5:Sudo apt-get install php5-mysql
  • PHP7:Sudo apt-get install php7.0-mysql

最後に、それを動かすためには、Webサーバを再起動する必要があります。

  • Apache:Sudo /etc/init.d/Apache2 restart
  • Nginx:Sudo /etc/init.d/nginx restart
178
ghbarratt

更新 :新しいバージョンは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サーバー上)、上の行を実行するだけで十分です。

73

PHP 7.0がある新しいバージョンのUbuntuでは、php-mysqlパッケージを入手できます。

Sudo apt-get install php-mysql

その後、サーバーを再起動します。

Sudo service Apache2 restart
26
ThomasAFink

私のWindowsマシンでは、私はphp.iniで拡張子dirへの絶対パスを与えなければなりませんでした:

extension_dir = "c:\php5\ext"

21
berdzi

私は同じ問題を抱えていました。解決策はOSによって異なります。私の場合、私はdebianを持っているので、それを解決するために:

  • 私のphpバージョンを( php5からphp7 )に更新しました
  • 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
    

これは私の問題を解決します

16
onlyme

Ubuntuでは実行するだけです

Sudo apt-get install php5-mysql
14
Dmitry Sobolev
Sudo apt-get install php-mysql 

ubuntuとPHP 7でうまくいった

9
Moses Nandwa

これらをphp.iniに追加するときは、php_pdo.dll参照がdbドライバdllより前にあることを確認してください。そうしないと、このエラーメッセージも表示されます。このように追加してください。

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
5
Paul Foster

MySQLとドライバが正しくインストールされている場合、php.iniをチェックしましたか(phpinfo()で正しい場所をチェックしましたか?)。

5
cem

CentOSPHP 5.5の場合、php55-mysqlndパッケージをインストールすることでこれを修正しました。

Sudo yum -y install php55w-mysqlnd # For Webtatic
Sudo yum -y install php55u-mysqlnd # For Remi

インストールを助けるために、PHPのインストール方法に応じてコメントを書いてください。利用可能なリポジトリはwebtaticremiです。

4
SimonW

windows 8.1/10の場合:\\ php.iniファイル内の "extension = pdo_mysql"のコメントを外してください。

3
Egor Doynikov

私が最後の日を過ごした理由は、次のようなエラーが出た理由です。私は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プラグインが付いていないことを確認してください。

3
Growling Flea

mysqllndの代わりにmysqlを使用することを強くお勧めします。数の変換やビットタイプの評価がmysqlの拡張子を使用して問題を評価するような問題がたくさんあるからです。

次のコマンドでubuntuにmysqllndをインストールします。

Sudo apt-get install php5-mysqlnd
2
MSS

私の場合、DSN文字列が正しくありませんでした。具体的には、mysql://.が含まれていませんでした。別のエラーメッセージが表示されます。

DSN文字列の先頭にmysql://を追加することで問題は解決しました。

2
gposton

問題は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がコメントされているか、間違った場所に設定されています。

2
hserge

モジュールがphp -m | grep pdo_mysqlで使用可能かどうかを確認してください。

そうでない場合、PHP 7.2の場合、Sudo apt install php7.2-mysqlを使用して関連パッケージをインストールできます。

他のPHPバージョンおよびパッケージマネージャーで同様のコマンドを使用します。

1
Pratik

何人かの人々が始めるためにインターネットから例のコードをコピー/ペーストしているので確認するべきもう1つのこと。 MySQLがここに入っていることを確認してください。

... $dbh = new PDO ("mysql: ...  

いくつかの例では、これは示しています

$dbh = new PDO ("dblib ...
1
Joe

私は別のphp.iniでテストを実行しているときに同じ問題を抱えていた。私は自分のphp.iniファイルにこれらの行を追加しなければなりませんでした:

[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so

お知らせ:まさにこの順番で

1
Facedown

Phpinfo()のextension_dirで正しいパスを確認してください。

1

私はphp7パッケージをインストールするためにphp5パッケージを削除した後も同じ問題に直面しました(これにはすべてのドライバが含まれています)。私は実際にmysqlモジュールなしでphp7パッケージをインストールしました。

私は端末に入力してそれを解決することができました:

1)$ apt-cache search php7は、私が見つけたモジュールを見ながら、すべてのモジュールをリストします。

php7.0-mysql - PHP用MySQLモジュール

2)$ Sudo apt-get php7.0-mysqlをインストールする

それでおしまい。私のLinuxシステムではうまくいきました。

(適切なphpバージョンを使用してください、あなたはphp5であるかもしれません)

1
Roshimon

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/

1
douggynix

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

1
aneth101

どこへ行っても、extension_dirのパスをextから絶対パスに変更する必要があることを読みました。それは私のために働きました。しかし、同僚のPCのサーバーを構築しようとしたとき、絶対パスではなく、値をextにする必要がありました。

絶対パスを入力しても拡張子が見つからない場合は、絶対パスとextの両方を試してみてください。

1
papillon

上記のすべての答えを読んでもまだうまくいかない場合は...

PHP PDO接続文字列が正しいことを確認してください。私の好きじゃない:

$dbh = new PDO('"mysql:Host=' . DB_Host . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

エラーメッセージには、どのドライバが見つからなかったかに関する情報はありません。

考えられるすべてのPDOおよびMySQLライブラリを再インストールした後、私は接続文字列の先頭に " があることを知りました。

1
JerzySBG

誤った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.phpPHP 7.2.2を示していました。

解決策
電話をかける代わりに

php artisan migrate:install   

これは私にこのエラーを与えた、私が使った

c:\xampp\php\php artisan migrate:install

そしてそれはうまくいった。

1
SollyM

私の場合は、php-cliでPDOを使用していましたが、問題なく動作しました。

Apacheから接続しようとしたときに初めて、ドライバが見つからないという問題が発生しました。

簡単なapt-get install php-mysqlはそれを解決しました。 (Ubuntu 16.04/PHP7。クレジットは選択した回答とIvanのコメントに移動します)

それが役立つことを願っています。

1
Balmipour

仮想マシンに入るのを忘れたため、同じ問題がありました。次のようにローカルディレクトリに移動すると:

cd /www/Homestead/my_project
php artisan migrate

そのエラーが表示されます。しかし、それは私の仮想マシンで動作します

cd ~/Homestead
vagrant ssh   
cd /www/Homestead/my_project
php artisan migrate
0
Adam

Linuxミント用

PhpBrew(5.5.9/7.0.14)を使用してPDO接続を作成しようとしているときに同じ問題がありました。

この記事の解決策のほとんどを試した後、私は次のことを行いました。

  1. PhpBrewの電源を切った

  2. Sudo apt-get install php7.0を実行しました(Linux Mint 17.2/PHP7.0.16) - インストールされた新しいphpバージョン

0
Andrei .K
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 '{}' \;
0
SamTzu

テストに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では機能しません。

0
ioleo
$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

これは私のために働きました。

0
Persianuser