Ich habe gerade Debian Lenny mit Apache, MySQL und PHP installiert und erhalte eine 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 haben. Es funktioniert gut 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, ich bekomme nur Expertenaustausch und Beispiele, aber keine Lösungen.
php.ini' file and uncomment
Erweiterung = php_pdo_mysql.dll. The path to your
Die Datei php.ini` finden Sie in Ihrer phpinfo ().extension=msql.so
und es funktioniert!docker exec
in den Container und ausführendocker-php-ext-install pdo pdo_mysql
.Antworten:
Sie benötigen ein Modul namens pdo_mysql. Auf der Suche nach folgenden Informationen in phpinfo (),
quelle
pdo_mysql
?sudo systemctl restart httpd.service
sudo apt-get install php-mysql
Der dsn in Ihrem Code zeigt an, dass Sie versuchen, eine Verbindung mit dem MySQL-Treiber herzustellen. Ihre Fehlermeldung zeigt an, dass dieser Treiber nicht verfügbar ist.
Überprüfen Sie, ob Sie die MySQL-Erweiterung auf Ihrem Server installiert haben.
In Ubuntu / Debian suchen Sie nach dem Paket mit:
Installieren Sie das php5-mysql-Paket, wenn Sie es nicht haben.
In Ubuntu / Debian können Sie verwenden:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
Um es zum Laufen zu bringen, müssen Sie Ihren Webserver neu starten:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
quelle
Update : Neuere Versionen sollten
php-sqlite3
Paket anstelle von verwendenphp5-sqlite
. Verwenden Sie dies also, wenn Sie eine aktuelle Ubuntu-Version verwenden:Die ursprüngliche Antwort auf die Frage ist hier:
Wenn in phpinfo () die Zeile pdo_sqlite nicht angezeigt wird (in meinem Fall auf meinem Ubuntu-Server), müssen Sie nur die obigen Zeilen ausführen, und schon kann es losgehen.
quelle
pdo_sqlite
und nicht installiert haben, erhaltenphp5-sqlite
Sie nur einePDOException
ohne Informationen über fehlendes SQLite und versuchen,php5-mysql
zweimal zu installieren .Für neuere Versionen von Ubuntu mit PHP 7.0 erhalten Sie das
php-mysql
Paket:Starten Sie dann Ihren Server neu:
quelle
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
Ich habe meinen
php.ini
Standort unter /etc/php/7.0/apache2/php.ini bearbeitetStarten Sie dann Apache neu:
Dies löst mein Problem
quelle
a2dismod php5
,a2enmod php7.0
undservice apache2 restart
bekam schließlich sichern mich und läuft.Auf meinem Windows-Computer musste ich den absoluten Pfad zum Erweiterungsverzeichnis in meiner php.ini angeben:
extension_dir = "c:\php5\ext"
quelle
extension_dir = "ext"
, aber nicht mit dieser.Unter Ubuntu einfach ausführen
quelle
sudo apt-get install php5-pgsql
funktionierte gut auf Ubuntu und PHP 7
quelle
Überprüfen Sie, ob das Modul mit verfügbar ist
php -m | grep pdo_mysql
.Wenn nicht, können Sie für PHP 7.2 das entsprechende Paket mit installieren
sudo apt install php7.2-mysql
.Verwenden Sie einen ähnlichen Befehl für andere PHP-Versionen und Paketmanager.
quelle
Wenn Sie diese zu Ihrer php.ini hinzufügen, stellen Sie sicher, dass die Referenz php_pdo.dll zuerst vor den DLLs der DB-Treiber steht. Andernfalls führt dies auch zu dieser Fehlermeldung. Fügen Sie sie wie folgt hinzu:
quelle
php_pdo.dll
Modul nicht mehr benötigt (existiert nicht mehr). php.net/manual/en/pdo.installation.php ist wahrscheinlich die ultimative Antwort auf diese Frage.Haben Sie Ihre php.ini überprüft (mit phpinfo () nach dem richtigen Speicherort suchen), ob MySQL und der Treiber korrekt installiert sind?
quelle
[MySQL]
Für
PHP 5.5
on habeCentOS
ich dies durch die Installation desphp55-mysqlnd
Pakets behoben .Um Hilfe bei der Installation zu erhalten, schreiben Sie einen Kommentar, da dies von der Art und Weise abhängt, wie PHP auf Ihrem System installiert ist. Verfügbare Repos sind
webtatic
undremi
.quelle
Für Windows 8.1 / 10 in der Datei: \\ php.ini sollten Sie die Zeile "extension = pdo_mysql" auskommentieren.
quelle
In meinem Fall war meine DSN-Zeichenfolge falsch, insbesondere enthielt sie nicht.
mysql://.
Ich hätte eine andere Fehlermeldung erwartet, möglicherweise so etwas wie "DSN-Zeichenfolge gibt keinen Treiber / kein Protokoll an."Durch Hinzufügen
mysql://
am Anfang der DSN-Zeichenfolge wurde das Problem behoben.quelle
Ich habe den letzten Tag damit verbracht herauszufinden, warum ich den folgenden Fehler erhalten habe. Ich verwende Ubuntu 14.04.
Das Problem:
Ich habe festgestellt, dass auf meiner PHP-CLI-Version php7.0 ausgeführt wurde, auf php_info () (der Webversion) jedoch php 5.5.9 angezeigt wurde. Obwohl php_info () sagte, dass pdo aktiviert war, erkannte die Verwendung der 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 getan habe war MySQL für PHP7.0 zu installieren und es konnte funktionieren.
Das hat funktioniert:
So überprüfen Sie die Version:
So installieren Sie MySQL für PHP7.0
1) Stellen Sie sicher, dass Ihre CLI-Version mit Ihrer Webversion identisch ist.
2) Wenn sie unterschiedlich sind, stellen Sie sicher, dass Ihre CLI-Version über das MySQL-Plug-In verfügt, da es nicht standardmäßig mitgeliefert wird.
quelle
Überprüfen Sie, ob extension_dir in der PHP-Konfigurationsdatei richtig eingestellt ist. Versuchen Sie, einige Erweiterungen zu kommentieren / zu kommentieren, und prüfen Sie, ob sie in phpinfo () enthalten sind. Wenn dies nicht der Fall ist, kann keine der PHP-Konfigurationsdateien geladen werden (falscher Speicherort). Extension_dir wird kommentiert oder auf den falschen Speicherort gesetzt.
quelle
Das Problem ist ein fehlendes PHP zur MySQL-Bibliothek. In CentOs habe ich es behoben, indem ich
# yum install php-mysql
Apache mit ausgeführt und dann neu gestartet habe.# /bin/systemctl restart httpd.service
Beachten Sie, dass sich die Benennung geringfügig von den auf Debian / Ubuntu basierenden Distributionen php-> php5 und httpd-> apache2 unterscheidet.quelle
Ich hatte das gleiche Problem beim Ausführen von Tests mit separater php.ini. Ich musste diese Zeilen zu meiner eigenen php.ini-Datei hinzufügen:
Hinweis: Genau in dieser Reihenfolge
quelle
Ich empfehle sehr
mysqllnd
statt ,mysql
weil Sie eine Menge Probleme haben würde , wie zum Umwandeln und auswertet Bit - Typs Problem mit dermysql
Erweiterung.auf Ubuntu
mysqllnd
mit folgendem Befehl installieren :quelle
Ich habe dieses Problem auf meinem Debian 6 behoben. Normalerweise hatte ich gerade ein
php5-common
Paket installiert . Nach der Installation müssen Sie Ihren Webserver neu starten (Apache oder Nginx, je nachdem, welchen Sie installiert haben). Dann mache ich einfach einelsof
auf dem Apache-Prozess-ID (lsof -p process_id
) wie folgt:Wie Sie oben sehen können, werden die Module in einem Dateipfad installiert, der nicht bekannt ist oder von einem gemeinsamen 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. Aus diesem Grund 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 des Bibliothekspakets in Debian 6. Ich habe das Problem gelöst, indem ich mit diesem Befehl ein Symbol für alle Dateien unter erstellt
/usr/lib/php5/20090626/
habe/usr/lib/php5/
:ln -s /usr/lib/php5/20090626/* /usr/lib/php5/
quelle
Das hat bei mir funktioniert.
quelle
Ich hatte das gleiche Problem, nachdem ich das PHP5-Paket (das auch alle Treiber enthält) entfernt hatte, um das PHP7-Paket zu installieren. Ich habe tatsächlich ein PHP7-Paket ohne ein MySQL-Modul installiert.
Ich habe es geschafft, es durch Eingabe des Terminals zu lösen:
1) $ apt-cache search php7, das alle Module auflistet 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 bei mir in meinem Linux-System funktioniert.
(Verwenden Sie die entsprechende PHP-Version, Ihre könnte PHP5 sein)
quelle
Nur eine weitere Sache, die bestätigt werden muss, da einige Leute Beispielcode aus dem Internet kopieren / einfügen, um loszulegen. Stellen Sie sicher, dass Sie MySQL hier eingegeben haben:
In einigen Beispielen zeigt dies
quelle
In meinem Fall habe ich PDO mit PHP-CLI verwendet und es hat gut funktioniert.
Erst als ich versuchte, eine Verbindung über Apache herzustellen, bekam ich das Problem "Fehlender Treiber", das ich nicht ganz verstand.
Ein einfaches
apt-get install php-mysql
löste es. (Ubuntu 16.04 / PHP7. Credits gehen an die ausgewählte Antwort & Iwans Kommentar)Hoffe es kann helfen.
quelle
Für diejenigen, die Symfony2 / 3 verwenden und sich fragen, warum dieser Fehler auftritt. Wenn Sie "Mapping_Typen" verwenden, tritt möglicherweise dieser Fehler auf. Der Grund ist, dass "Mapping_Typen" auf der falschen Ebene platziert ist. Zum Beispiel :
Diese "Mapping-Typen" müssen auf dieser Ebene platziert werden:
ich hoffe das hilft
Ich habe die Lösung hier gefunden: https://github.com/doctrine/DoctrineBundle/issues/327
quelle
Überall, wo ich hingehe, lese ich, dass der Pfad
extension_dir
vonext
zu einem absoluten Pfad geändert werden sollte . Es hat bei mir funktioniert. Beim Versuch, einen Server für den PC meines Kollegen zu erstellen, musste ich den Wert jedoch zulassen,ext
anstatt einen absoluten Pfad anzugeben.Wenn Sie einen absoluten Pfad eingegeben haben und die Erweiterung immer noch nicht gefunden wird, versuchen Sie es mit dem absoluten Pfad und
ext
.quelle
Es wurde eine falsche Installation von PHP aufgerufen
Ich hatte das gleiche Problem. Und ich hoffe, das würde jemandem helfen, der ein ähnliches Problem hat wie ich.
Szenario
Ich habe eine
phpinfo.php
Datei impublic
Ordner erstellt und die ausgeführtphpinfo()
, um nach dem Speicherort meinerphp.ini
Datei zu suchen .PHP.ini Location =
c:\xampp\php\php.ini
Problem
Anruf
c:\xampp\htdocs> php -v
zurückgegeben,PHP 7.2.3
aberphpinfo.php
angezeigtPHP 7.2.2
.Lösung
Anstatt anzurufen
was mir diesen Fehler gab, habe ich benutzt
und es hat funktioniert.
quelle
Überprüfen Sie den korrekten Pfad in extension_dir in Ihrer phpinfo ().
quelle
Ich kämpfte und kämpfte mit "apt install php-mysql php7toInfinity und vergiss 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.
Diese 3 Befehle setzen die Datei- und Ordnerberechtigungen auf der Website zurück und bringen sie wieder zum Laufen.
quelle
Ich hatte die gleiche Ausnahme beim Versuch zu verwenden
pdo_sqlite
. Das Problem war, dass die automatisch erstellten20-pdo_sqlite.ini
und20-sqlite3.ini
symlinks (in/etc/php5/mods-enabled
) waren.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 wurde behoben.
quelle