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.
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
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:
Sudo apt-get install php5-mysql
Sudo apt-get install php7.0-mysql
Damit es funktioniert, müssen Sie Ihren Webserver neu starten:
Sudo /etc/init.d/Apache2 restart
Sudo /etc/init.d/nginx restart
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.
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
Auf meinem Windows-Rechner musste ich den absoluten Pfad zum Erweiterungsverzeichnis in meiner php.ini angeben:
extension_dir = "c:\php5\ext"
Ich hatte das gleiche Problem. Die Lösung hängt vom Betriebssystem ab. In meinem Fall habe ich debian, um es zu lösen:
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
Unter Ubuntu einfach ausführen
Sudo apt-get install php5-mysql
Sudo apt-get install php-mysql
funktionierte gut auf Ubuntu und PHP 7
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
Haben Sie Ihre php.ini überprüft (mit phpinfo () nach dem richtigen Speicherort gesucht), ob MySQL und der Treiber korrekt installiert sind?
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
.
für Windows 8.1/10 in der\php.ini-Datei sollten Sie die Kommentarzeile "extension = pdo_mysql"
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.
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
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.
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).
Ü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.
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 ...
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
Überprüfen Sie den korrekten Pfad in extension_dir in Ihrer phpinfo ().
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)
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/
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
Ü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.
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.
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
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:
PhpBrew ausgeschaltet
Sudo apt-get install php7.0
(Linux Mint 17.2/PHP7.0.16) ausgeführt - neue PHP-Version installiert
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 '{}' \;
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.
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.
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.
$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.