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


292

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インストールと関係がありますか?

インターネットの検索は役に立ちませんでした、私が得るすべては専門家交換と例ですが、解決策はありません。


21
php.ini' file and uncomment extension = php_pdo_mysql.dllを見てください. The path to your 。php.ini`ファイルは、phpinfo()で確認できます。
スタイル

3
今後の読者に参考にしてください。このエラーが発生し、GoDaddyがホストの場合は、管理者アカウントにログインしてください。ホスティングの詳細->プログラミング言語。PHPのバージョンを最新または少なくとも5.4にアップグレードします
Joe

@Joeアップグレードしましたが、まだエラーが表示されます(GoDaddy)
Eugen Sunic '19年

@styfle 1up、Linuxマシンで設定extension=msql.soしました。
AjayKumarBasuthkar 2018年

関係者:Dockerでphp 7.1以降を使用している場合はdocker exec、コンテナにアクセスしてを実行できますdocker-php-ext-install pdo pdo_mysql
cleybertandre

回答:


240

pdo_mysqlというモジュールが必要です。phpinfo()で以下を探し、

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44

2
@ZZ Coderこれはphpinfo()にはありません。インストール方法を知っていますpdo_mysqlか?
マイクムーア

14
@letseatfood ...どうやってこれを理解したの?私は同じ問題を抱えています!
Hristo

17
MySQLのPDOサポートをインストールするには、Ubuntuの「php5-mysql」パッケージをお勧めします
Tom Carver

3
変更を有効にするためにApacheを再起動する1つのニーズをApacheやその他のWebサーバーを使用して、それらのために、次の点に注意してくださいsudo systemctl restart httpd.service
Mugoma J. Okomba

50
Ubuntu 16.04およびPHP7の場合sudo apt-get install php-mysql
Ivan Marjanovic

199

コードの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

最後に、それを機能させるには、ウェブサーバーを再起動する必要があります:

  • Apache: sudo /etc/init.d/apache2 restart
  • Nginx: sudo /etc/init.d/nginx restart

3
ああ...再起動は私に何とかしています!
KOGI、2015

同じ問題が発生しました。php5-fpmを再起動してください。
Eko3alpha

私があなたの答えを見るまで、ほぼ一晩これを割ろうとして過ごしました。すべてを正しく行いましたが、Apacheを再起動するのを忘れていました。
Mugoma J. Okomba

php-mysqlはすでに最新バージョンです(1:7.1 + 49 + deb.sury.org〜xenial + 4)。nginx php fpmを使用してubuntu 16.04にコマンドsudo apt-get install php-mysqlを実行しようとすると、php fpmを再起動してnginxを再起動します。
Prashant Barve 2017年

現在、php-mysqlおよびphp7.1-mysqlのようです。うまくいけば、これは前進するパターンです。
John P

83

更新:新しいバージョンでは、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サーバー上)、上記の行を実行するだけで問題ありません。


57
OPがMySQLを使用しているときに、なぜsqliteの指示を出したのですか?
Andrew Ensley

7
@Andrewを使用pdo_sqliteしてインストールしなかった場合は、不足しているsqliteについての情報がないをphp5-sqlite取得し、2回PDOExceptionインストールphp5-mysqlしてみます。
Aitch 2015

2
php5-sqliteは廃止され、システム(Ubuntu 16.04など)で使用できなくなっている可能性があることに注意してください。代わりにphp-sqlite3をインストールしてください。
Matthias、

2
@briankipもちろんです。SQLiteに接続しようとしていて、そのドライバーがない場合です。しかし、OPはMySQLに接続しようとしています。sqliteをインストールしても問題は解決しませんでした。
Andrew Ensley 2017

2
@AndrewEnsley。このページのタイトルは、dbプラットフォームに関係なく誰もが受け取るエラーです。その結果、エラーのみをグーグル検索した場合、このページのグーグル検索ランクは最高になります。したがって、IMO、他のデータベースに関連するこの質問への回答はここで歓迎されます。それらがOPで機能しない場合は、そのようにしてください... OPはそれらの回答を受け入れる必要はありません。これは、この質問にZoltarの検索ランクを贈ったタイトルのエラーメッセージを調査している他の人にとって、この回答が「有用」ではないという意味ではありません。+1
elrobis

34

PHP 7.0がインストールされているUbuntuの新しいバージョンの場合、php-mysqlパッケージを入手できます。

sudo apt-get install php-mysql

次に、サーバーを再起動します。

sudo service apache2 restart

私は今日あなたがバージョンsudo apt-get install php7.2-mysqlで具体的である必要があると思います
Stan Sokolov

25

同じ問題がありました。ソリューションは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

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


さておき、これはかなり十分ではなかったし、完全に手順を経る動作することPHP7を確認する前にPHP5を削除したくない見つける人、私のような人のためとして:a2dismod php5a2enmod php7.0、そしてservice apache2 restart最終的には私が稼働して戻りました。
depwl9992 2017年

21

私のWindowsマシンでは、php.iniで拡張機能dirへの絶対パスを指定する必要がありました。

extension_dir = "c:\php5\ext"


2
これが正しいことを確認しました(Win2008)。奇妙なこと-他の拡張機能は、推奨されているでのみ機能しますが、これでは機能しextension_dir = "ext"ません。
scipilot 2014

こっちも一緒。パスを追加して作業を開始しました。Windows10、p​​hp7.1
Chris Gibb

14

Ubuntuでは実行するだけです

sudo apt-get install php5-mysql

1
私はSymfony2とUbuntuの背後にいました。Pdo_mysqlが見つかりませんでした([PDOException]がドライバーを見つけられませんでした)。これで問題は解決しました。
2013

2
:それはされてしまったので、私のために私は、PostgreSQLを欠いたsudo apt-get install php5-pgsql
Kzqai

@Kzqai 2:30 amそしてあなたはちょうど私の問題を解決しました、私はmysqlを使用していませんでしたpostgres(>

9
sudo apt-get install php-mysql 

ubuntuとphp 7でうまく機能しました


php7ではなくphp5.6を使用していますが、それは私にとってはうまくいきました。しかし、私は7をインストールしました。私は5.6を後でインストールし、php7をアンインストールせずにそれに切り替えました
Mubashar Abbas

9

でモジュールが使用可能かどうかを確認しphp -m | grep pdo_mysqlます。

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

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


6

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

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll

2
PHP v5.3以降、php_pdo.dllモジュールは必要ありません(存在しません)。php.net/manual/en/pdo.installation.phpは、おそらくこの質問に対する究極の答えです。
Martin Zeitler、2015年

5

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


2
php.iniを探していますが、何を探したらよいですか?私はで始まるセクションを参照[MySQL]
マイク・ムーア

4

以下のためPHP 5.5CentOS私は、インストールすることで、これを固定php55-mysqlndパッケージを。

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

インストールのヘルプについては、PHPがシステムにインストールされている方法に応じてコメントを書き込んでください。利用可能なレポのはあるwebtaticremi



3

私の場合、DSN文字列が正しくありませんでした。具体的には、DSN文字列には含まれていませんでしたmysql://. 。おそらく、「DSN文字列はドライバー/プロトコルを指定していません」のような別のエラーメッセージを予期していました。

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


3

私は最終日に、次のエラーが発生する理由を理解しようとしました。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プラグインが含まれていることを確認してください。


2

PHP設定ファイルのextension_dirが正しく設定されているか確認してください。いくつかの拡張機能をコメント/コメント解除して、phpinfo()に反映されているかどうかを確認してください。そうでない場合は、php構成ファイルを読み込めません(場所が間違っています)extension_dirがコメント化されているか、間違った場所に設定されています。


2

問題は、phpライブラリからmysqlライブラリへの欠落です。CentOでは、# yum install php-mysqlapacheを実行してから再起動することで修正しまし # /bin/systemctl restart httpd.serviceた。名前はdebian / ubuntuベースのディストリビューションphp-> php5とhttpd-> apache2とは少し異なります。


2

別のphp.iniでテストを実行しているときに同じ問題が発生しました。これらの行を自分のphp.iniファイルに追加する必要がありました。

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

通知:正確にこの順序で


2

あなたが数の変換やビットタイプが拡張に関する問題を評価するような多くの問題を抱えているので、mysqllnd代わりに私は非常にお勧めしmysqlますmysql

mysqllnd次のコマンドを使用してubuntuインストールで:

sudo apt-get install php5-mysqlnd

1

Debian 6でこの問題を修正しました。通常、php5-commonパッケージをインストールしたばかりです。インストール後、Webサーバーを再起動する必要があります(インストールしたサーバーに応じて、Apacheまたはnginx)。次にlsof、apacheプロセスID(lsof -p process_id)を次のように実行します:

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/


php-mysqlはすでに最新バージョンです(1:7.1 + 49 + deb.sury.org〜xenial + 4)。
Prashant Barve 2017年

1
$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

これでうまくいきました。


1
ドライバーがなくても、このユーザーは同じ例外を
受け取り

1

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

ターミナルに入力してなんとか解決しました:

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

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

2)$ sudo apt-get install php7.0-mysql

それでおしまい。それは私のLinuxシステムで私のために働いた。

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


1

始めるためにインターネットからサンプルコードをコピー/貼り付けている人がいるので、もう1つ確認する必要があります。MySQLがここに入力されていることを確認してください:

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

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

$dbh = new PDO ("dblib ...

1

私の場合、PDOをphp-cliと一緒に使用していて、問題なく動作しました。

Apacheから接続しようとしたときにのみ、「ドライバがありません」という問題が発生しました。

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

お役に立てれば幸いです。


1

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

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

絶対パスを指定しても拡張子が見つからない場合は、絶対パスとの両方を使用して検討してくださいext


1

PHPの誤ったインストールが呼び出されていました

私は同じ問題を経験していました。そして、これが私と同じような問題を抱えている誰かを助けることを願っています。

シナリオ

OS = Windows 10  
Platform = XAMPP  
PHP Version = 7 (Multiple Version seem to have been installed in the PC)  

フォルダにphpinfo.phpファイルを作成し、publicを実行しphpinfo()php.iniファイルの場所を探します。

PHP.iniの場所= c:\xampp\php\php.ini

問題
通話がc:\xampp\htdocs> php -v戻ったPHP 7.2.3phpinfo.php表示されたPHP 7.2.2


呼び出す代わりに 解決策

php artisan migrate:install   

これは私にこのエラーを与えました、私は使用しました

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

そしてそれは働いた。



1
PHP Fatal error:  Uncaught PDOException: could not find driver

私は「apt install php-mysql php7toInfinity and忘れないでください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

使用しようとしたときにも同じ例外がありましたpdo_sqlite。問題は自動的に作成されていることだった20-pdo_sqlite.ini20-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

問題を修正しました。

注:古いphpバージョンでは設定を検索しなかったため、これは機能しません。 /etc/php5/mods-enabled

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.