it-swarm.com.de

PDOException "Treiber konnte nicht gefunden werden"

Ich habe gerade Debian Lenny mit Apache, MySQL und PHP installiert und erhalte einen PDOException could not find driver.

Dies ist die spezifische Codezeile, auf die es sich bezieht:

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

DB_Host, DB_NAME, DB_USER und DB_PASS sind Konstanten, die ich definiert habe. Es funktioniert einwandfrei auf dem Produktionsserver (und auf meinem vorherigen Ubuntu Server-Setup).

Hat das etwas mit meiner PHP Installation zu tun?

Das Durchsuchen des Internets hat nicht geholfen, alles, was ich bekomme, ist Expertenaustausch und Beispiele, aber keine Lösungen.

236
Mike Moore

Sie benötigen ein Modul mit dem Namen pdo_mysql. In phpinfo () gesucht,

pdo_mysql

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

Das dsn in Ihrem Code zeigt, dass Sie versuchen, eine Verbindung mit dem Mysql-Treiber herzustellen. Ihre Fehlermeldung weist darauf hin, dass dieser Treiber nicht verfügbar ist.

Überprüfen Sie, ob Sie die mysql-Erweiterung auf Ihrem Server installiert haben.

In Ubuntu/Debian überprüfen Sie das Paket mit:

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

Installieren Sie das Paket php5-mysql, wenn Sie es nicht haben. 

In Ubuntu/Debian können Sie Folgendes verwenden:

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

Damit es funktioniert, müssen Sie Ihren Webserver neu starten:

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

Update : neuere Versionen sollten php-sqlite3-Paket anstelle von php5-sqlite verwenden. Verwenden Sie also diese Option, wenn Sie eine aktuelle Ubuntu-Version verwenden:

Sudo apt-get install sqlite php-sqlite3

Ursprüngliche Antwort auf die Frage ist hier:

Sudo apt-get install sqlite php5-sqlite
Sudo /etc/init.d/Apache2 restart

Wenn in Ihrem phpinfo () nicht die Zeile pdo_sqlite angezeigt wird (in meinem Fall auf meinem Ubuntu-Server), müssen Sie nur die Zeilen oben ausführen und dann können Sie loslegen.

71

Für neuere Versionen von Ubuntu mit PHP 7.0 erhalten Sie das php-mysql-Paket:

Sudo apt-get install php-mysql

Starten Sie dann Ihren Server neu:

Sudo service Apache2 restart
21
FinkAvenue

Auf meinem Windows-Rechner musste ich den absoluten Pfad zum Erweiterungsverzeichnis in meiner php.ini angeben:

extension_dir = "c:\php5\ext"

21
berdzi

Ich hatte das gleiche Problem. Die Lösung hängt vom Betriebssystem ab. In meinem Fall habe ich debian, um es zu lösen:

  • Meine PHP-Version von ( php5 zu php7 ) aktualisiert
  • Installieren Sie php-mysql und php7.0-mysql

    apt-get install php-mysql
    apt-get install php7.0-mysql
    
  • Ich habe meinen php.ini locate unter /etc/php/7.0/Apache2/php.ini bearbeitet

    uncomment the line : extension=php_pdo_mysql.dll
    
  • Starten Sie dann Apache neu:

    service Apache2 restart
    

Das löst mein Problem

14
onlyme

Unter Ubuntu einfach ausführen 

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

funktionierte gut auf Ubuntu und PHP 7

8
Moses Nandwa

Wenn Sie diese in Ihre php.ini einfügen, vergewissern Sie sich, dass der Verweis auf php_pdo.dll vor den db-dll-Treibern steht. Andernfalls wird auch diese Fehlermeldung angezeigt. Fügen Sie sie wie folgt hinzu:

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

Haben Sie Ihre php.ini überprüft (mit phpinfo () nach dem richtigen Speicherort gesucht), ob MySQL und der Treiber korrekt installiert sind?

5
cem

Für PHP 5.5 auf CentOS habe ich dies behoben, indem das php55-mysqlnd-Paket installiert wurde.

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

Wenn Sie Hilfe bei der Installation benötigen, schreiben Sie einen Kommentar, da er davon abhängig ist, wie PHP auf Ihrem System installiert ist. Verfügbare Repos sind webtatic und remi.

4
SimonW

für Windows 8.1/10 in der\php.ini-Datei sollten Sie die Kommentarzeile "extension = pdo_mysql"

3
Egor Doynikov

Ich verbrachte den letzten Tag damit, herauszufinden, warum ich den folgenden Fehler bekam. Ich verwende Ubuntu 14.04. 

Das Problem: 
Ich habe bemerkt, dass meine PHP-CLI-Version php7.0 ausführte, aber php_info () (die Webversion) zeigte php 5.5.9 an. Obwohl php_info () sagte, dass pdo aktiviert war, erkannte die Befehlszeile (CLI) den Befehl pdo_mysql nicht. Es stellt sich heraus, dass mysql für meine alte Version aktiviert war, nicht jedoch für die CLI-Version. Alles, was ich tat, war MySQL für PHP7.0 zu installieren und es konnte funktionieren.

Das hat funktioniert:

So überprüfen Sie die Version:

php -v

So installieren Sie MySQL für PHP7.0

Sudo apt-get install php7.0-mysql

1) Stellen Sie sicher, dass Ihre CLI-Version mit Ihrer Webversion übereinstimmt 
2) Wenn sie unterschiedlich sind, vergewissern Sie sich, dass Ihre CLI-Version über das mysql-Plug-In verfügt, da es nicht als Standard enthalten ist. 

3
Growling Flea

Ich empfehle sehr mysqllnd anstelle von mysql, da Sie viele Probleme wie die Zahlenkonvertierung und das Bit-Typ-Problem mit der mysql-Erweiterung haben würden.

auf Ubuntu install mysqllnd mit folgendem Befehl:

Sudo apt-get install php5-mysqlnd
2
MSS

In meinem Fall war meine DSN-Zeichenfolge falsch, insbesondere enthielt sie nicht mysql://. Ich hätte eine andere Fehlermeldung erwartet, vielleicht etwas wie 'DSN-Zeichenfolge spezifiziert nicht Treiber/Protokoll.

Durch Hinzufügen von mysql:// am Anfang der DSN-Zeichenfolge wurde das Problem behoben.

2
gposton

Das Problem ist eine fehlende PHP-Bibliothek für MySQL. In CentOs habe ich es behoben, indem ich .__ ausgeführt habe. # yum install php-mysql und dann Apache mit # /bin/systemctl restart httpd.service neu starten. Beachten Sie, dass sich die Benennung geringfügig von Debian/Ubuntu-basierten Distributionen, php-> php5 und httpd-> Apache2 unterscheidet.

Prüfen Sie, ob extension_dir in der PHP-Konfigurationsdatei richtig eingestellt ist. Versuchen Sie, einige Erweiterungen zu kommentieren/zu kommentieren und zu sehen, ob sie in phpinfo () ..__ reflektiert werden. Wenn dies nicht der Fall ist, können Sie die PHP-Konfigurationsdatei nicht laden (falscher Speicherort). 

2
hserge

Überprüfen Sie, ob das Modul mit php -m | grep pdo_mysql verfügbar ist.

Wenn nicht, können Sie für PHP 7.2 das entsprechende Paket mit Sudo apt install php7.2-mysql installieren.

Verwenden Sie ähnliche Befehle für andere PHP Versionen und Paketmanager.

1
Pratik

Noch etwas zu bestätigen, da einige Leute Beispielcode aus dem Internet kopieren/einfügen, um zu beginnen. Stellen Sie sicher, dass Sie MySQL hier eingegeben haben: 

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

In einigen Beispielen zeigt dies 

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

Ich hatte das gleiche Problem während der Tests mit separater php.ini. Ich musste diese Zeilen meiner eigenen php.ini-Datei hinzufügen:

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

Hinweis: Genau in dieser Reihenfolge

1
Facedown

Überprüfen Sie den korrekten Pfad in extension_dir in Ihrer phpinfo ().

1

Ich hatte das gleiche Problem, nachdem ich das php5-Paket (das alle Treiber enthält) entfernt hatte, um das php7-Paket zu installieren. Ich habe tatsächlich das php7-Paket ohne ein mysql-Modul installiert.

Ich habe es durch Eingabe des Terminals gelöst:

1) $ apt-cache search php7 Hier werden alle Module aufgelistet und die gefundenen Module durchsucht.

php7.0-mysql - MySQL-Modul für PHP

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

Das ist es. Es hat für mich in meinem Linux-System funktioniert.

(Verwenden Sie die entsprechende PHP-Version, Ihre PHP-Version könnte PHP sein)

1
Roshimon

Ich habe dieses Problem auf meinem Debian 6 behoben. Normalerweise hatte ich gerade das php5-common-Paket installiert. Nach der Installation müssen Sie Ihren Webserver (Apache oder Nginx, je nachdem, welchen Sie installiert haben) neu starten .. Dann füge ich eine lsof für die Apache-Prozess-ID (lsof -p process_id) wie folgt ein:

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

Wie Sie oben sehen können, werden die Module in einem Dateipfad installiert, der nicht bekannt ist oder vom allgemeinen Bibliothekspfad geleitet wird:/usr/lib/php5/20090626/. Für Ihre Installation kann es anders sein, aber nur der Pfad von pdo_mysql.so, pdo.so, mysqli.so. Deshalb konnte Drupal oder eine andere PHP-Engine die Bibliothek nicht finden und zeigt diesen Fehler an: PDOException: could not find driver

Ich weiß nur nicht, warum es auf einem so seltsamen Pfad installiert ist, für mich ist es nur ein Fehler im Installationsskript für das Bibliothekspaket in Debian 6. Ich löste das Problem, indem ich für alle Dateien unter /usr/lib/php5/20090626/ ein Symbol erstellte /usr/lib/php5/ mit diesem Befehl:

ln -s /usr/lib/php5/20090626/* /usr/lib/php5/

1
douggynix

Für diejenigen, die Symfony2/3 verwenden und sich fragen, warum Sie diesen Fehler erhalten. Wenn Sie "mapping_types" verwenden, kann dieser Fehler auftreten. Der Grund ist, dass "mapping_types" auf der falschen Ebene platziert wird. Zum Beispiel :

doctrine:
  dbal:
    mapping_types:
        set: string

Diese "mapping_types" muss auf dieser Ebene platziert werden:

doctrine:
dbal:
    #To counter the error caused by 'mapping_types'
    connections:
        default:
            server_version: %database_server_version%
            mapping_types:
                set: string

Ich hoffe das hilft

Ich habe die Lösung hier gefunden: https://github.com/doctrine/DoctrineBundle/issues/327

1
aneth101

Überall wo ich hingehe, lese ich, dass der Pfad von extension_dir von ext in einen absoluten Pfad geändert werden sollte. Es hat für mich funktioniert. Beim Versuch, einen Server des PCs meines Kollegen zu erstellen, musste ich den Wert auf ext setzen, anstatt einen absoluten Pfad anzugeben.

Wenn Sie einen absoluten Pfad angegeben haben und die Erweiterung trotzdem nicht gefunden wird, versuchen Sie, beide mit dem absoluten Pfad und ext zu versuchen.

1
papillon

In meinem Fall habe ich PDO mit PHP-Cli verwendet, und es hat gut funktioniert.

Erst als ich versuchte, eine Verbindung von Apache herzustellen, bekam ich das Problem "Treiber fehlt", was ich nicht ganz verstand.

Ein einfacher apt-get install php-mysql hat es gelöst. (Ubuntu 16.04/PHP7. Credits gehen auf die ausgewählte Antwort und den Kommentar von Ivan)

Ich hoffe es kann helfen.

1
Balmipour

Hatte das gleiche Problem, weil ich vergessen habe, auf meine virtuelle Maschine zuzugreifen. Wenn ich so in mein lokales Verzeichnis gehe:

cd /www/Homestead/my_project
php artisan migrate

dieser Fehler wird angezeigt. Aber es funktioniert auf meiner virtuellen Maschine

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

Für Linux Mint

Ich hatte das gleiche Problem, als ich PhpBrew (5.5.9/7.0.14) verwendete und versuchte, eine PDO-Verbindung herzustellen.

Nachdem ich die meisten Lösungen in diesem Beitrag ausprobiert hatte, tat ich Folgendes:

  1. PhpBrew ausgeschaltet 

  2. Sudo apt-get install php7.0 (Linux Mint 17.2/PHP7.0.16) ausgeführt - neue PHP-Version installiert

0
Andrei .K
PHP Fatal error:  Uncaught PDOException: could not find driver

Ich kämpfte und kämpfte mit "apt install php-mysql php7toInfinity und vergesse sqlite-what-ever's nicht" und konnte diese Fehlermeldung einfach nicht loswerden, bis ich zu den Grundlagen zurückkehrte und die Dateiberechtigungen auf der Website zurücksetzte fraglich.

Mit diesen drei Befehlen werden die Datei- und Ordnerberechtigungen auf der Website zurückgesetzt und funktionieren wieder.

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

Wenn Sie sqlite zum Testen verwenden, benötigen Sie das php sqlite pdo-Laufwerk . Sie können sie wie folgt installieren.

Für Ubuntu 14.04

Sudo apt-get install php5-sqlite
Sudo service Apache2 restart

In ubuntu 16.04 gibt es keinen php5-sqlite

Sudo apt-get install php7.0-sqlite
Sudo service Apache2 restart

Ich hatte die gleiche Ausnahme, als ich pdo_sqlite verwendete. Das Problem war, dass die automatisch erstellten 20-pdo_sqlite.ini- und 20-sqlite3.ini-Symlinks (in /etc/php5/mods-enabled) beschädigt wurden.

Entfernen Sie die defekten Symlinks und fügen Sie sie manuell hinzu mit:

  • 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

das Problem behoben.

Hinweis: Dies funktioniert nicht für ältere PHP-Versionen, da in /etc/php5/mods-enabled nicht nach Konfigurationsdateien gesucht wurde.

0
ioleo

Wenn du alle Antworten oben liest und es immer noch nicht funktioniert ...

Stellen Sie sicher, dass Ihre PHP PDO-Verbindungszeichenfolge in Ordnung ist. Nicht so wie meine:

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

In der Fehlermeldung ist keine Information darüber enthalten, welcher Treiber nicht gefunden wurde.

Nachdem ich alle möglichen PDO- und MySQL-Bibliotheken neu installiert hatte, stellte ich fest, dass am Anfang meiner Verbindungszeichenfolge " stand.

0
JerzySBG

Falsche Installation von PHP wurde aufgerufen

Ich hatte das gleiche Problem. Und ich hoffe, das würde jemandem helfen, der ein ähnliches Problem hat wie ich.

Szenario  

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

Ich habe eine phpinfo.php-Datei im public-Ordner erstellt und führe die phpinfo() aus, um nach dem Speicherort meiner php.ini-Datei zu suchen.

PHP.ini Location = c:\xampp\php\php.ini 

Problem
Beim Aufruf von c:\xampp\htdocs> php -v wurde PHP 7.2.3 zurückgegeben, aber phpinfo.php zeigte PHP 7.2.2 an. 

Lösung
Anrufen 

php artisan migrate:install   

was mir diesen fehler gegeben hat, habe ich benutzt 

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

und es hat funktioniert.

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

Das hat bei mir funktioniert.

0
Persianuser