Laravel: Fehler [PDOException]: Treiber in PostgreSQL konnte nicht gefunden werden

77

Ich versuche, über Laravel eine Verbindung mit der PostgreSQL-Datenbank herzustellen, um eine PHP-Handwerker-Migration durchzuführen, aber es scheint keine Anweisung zu geben, da der Datenbankname von MySQL gelesen wird.

Hier sind die Befehle aus database.php:

'connections' => array(

    'sqlite' => array(
        'driver'   => 'sqlite',
        'database' => __DIR__.'/../database/production.sqlite',
        'prefix'   => '',
    ),

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'database',
        'username'  => 'root',
        'password'  => '',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    'pgsql' => array(
        'driver'   => 'pgsql',
        'host'     => 'localhost',
        'database' => 'postgres',
        'username' => 'postgres',
        'password' => 'root',
        'charset'  => 'utf8',
        'prefix'   => '',
        'schema'   => 'public',
    ),

    'sqlsrv' => array(
        'driver'   => 'sqlsrv',
        'host'     => 'localhost',
        'database' => 'database',
        'username' => 'root',
        'password' => '',
        'prefix'   => '',
    ),

),

Wenn ich die MySQL-Pfade entferne, bekomme ich:

[InvalidArgumentException]
Database [mysql] not configured.


BEARBEITEN: Wenn ich versuche, PHP Artisan zu migrieren, erhalte ich eine 'PDOException: Treiber konnte nicht gefunden werden'. Ich benutze WAMP und bin in Win8.1. Verwendung von PostgreSQL als Datenbank.


EDIT: Habe eine Reihe alternativer Lösungen ausprobiert, aber ich sollte dies trotzdem lösen. Die php.iniDatei wurde in Apache, WAMP (aus dem PHP-Ordner) und PostgreSQL überprüft. Das extension_dirist richtig wie es ist ->extension_dir = "c:/wamp/bin/php/php5.5.12/ext/"

Die extension=pdo_pgsql.dllund extension=pgsql.dllsind unkommentiert.

Den PATHTrick in den 'Systemvariablen' ausgeführt und neu gestartet. Keine Chance.

Danke für die bisherige Hilfe.

Das sind meine Fahrer php_pdo_driver.h& php_pdo.hvonC:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\php\SDK\include\ext\pdo

Informationen von phpinfo:

PHP Version 5.5.12

Compiler MSVC11 (Visual C ++ 2012) Konfigurieren Sie den Befehl cscript / nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "- ohne-pdo-mssql "" - ohne-pi3web "" - mit-pdo-oci = C: \ php-sdk \ oracle \ x64 \ instantclient10 \ sdk, geteilt "" - mit-oci8 = C: \ php -sdk \ oracle \ x64 \ instantclient10 \ sdk, freigegeben "" --with-oci8-11g = C: \ php-sdk \ oracle \ x64 \ instantclient11 \ sdk, freigegeben "" --enable-object-out-dir = ../obj/ "" --enable-com-dotnet = shared "" --with-mcrypt = static "" --disable-static-analyse "" --with-pgo "

Hyperion
quelle
Wenn Datenbank der Name Ihrer Datenbank ist, verwenden Sie ein reserviertes Wort als Datenbanknamen
David Jones
1
Mein PostgreSQL-Datenbankname ist postgres, wie im Code angegeben ^
Hyperion
Genial, hab deinen Beitrag total falsch verstanden. Sind Sie sicher, dass Laravel standardmäßig versucht, eine Verbindung zu Ihrer Postgres-Datenbank herzustellen?
David Jones
Ich glaube nicht :( Es scheint, als würde standardmäßig versucht, eine Verbindung zu MySQL herzustellen, und ich möchte herausfinden, wie es geht. Erraten Sie dem Benutzer, wie er es herausgefunden hat. Vielen Dank, mein Freund.
Hyperion

Antworten:

86

Stellen Sie sicher, dass Sie den 'default'Schlüssel konfigurierenapp/config/database.php

Für Postgres wäre dies 'default' => 'postgres',

Wenn Sie eine [PDOException] could not find driverFehlermeldung erhalten, überprüfen Sie, ob Sie die richtigen PHP-Erweiterungen installiert haben. Sie benötigen pdo_pgsql.sound pgsql.soinstalliert und aktiviert. Die Anweisungen dazu variieren zwischen den Betriebssystemen.

Für Windows sollten die pgsqlErweiterungen mit der offiziellen PHP-Distribution vorab heruntergeladen werden. Bearbeiten Sie einfach Ihre php.iniund kommentieren Sie die Zeilen extension=pdo_pgsql.sound ausextension=pgsql.so

Auch in php.ini, stellen Sie sicher , extension_dirwird auf das richtige Verzeichnis. Es soll ein Ordner mit dem Namen sein extensionsoder extin Ihrem PHP - Installationsverzeichnis oder ähnliches.

Kopieren Sie schließlich libpq.dllaus C:\wamp\bin\php\php5.*\in C:\wamp\bin\apache*\binund starten Sie alle Dienste über die WampServer Schnittstelle.

Wenn Sie immer noch die Ausnahme erhalten, müssen Sie möglicherweise das postgres- \binVerzeichnis zu Ihrem PATH:

  1. Systemeigenschaften -> Registerkarte Erweitert -> Umgebungsvariablen
  2. Scrollen Sie in der Gruppe 'Systemvariablen' in der unteren Hälfte des Fensters durch und suchen Sie den PATHEintrag.
  3. Wählen Sie es aus und klicken Sie auf Bearbeiten
  4. Geben Sie am Ende des vorhandenen Eintrags den vollständigen Pfad zu Ihrem postgres bin-Verzeichnis ein. Der Ordner bin sollte sich im Stammverzeichnis Ihres Postgres-Installationsverzeichnisses befinden.
  5. Starten Sie alle geöffneten Eingabeaufforderungen neu oder starten Sie Ihren Computer neu, um sicherzugehen.

Dies sollte hoffentlich alle Probleme lösen. Weitere Informationen finden Sie unter:

Lainceline
quelle
Vielen Dank für Ihre Hilfe. Bitte überprüfen Sie den Bearbeitungsteil in meinem Beitrag. Übrigens, der Standard-Datenbankpfad war mein erstes Problem, das bereits behoben wurde. Das Problem mit dem PDO-Treiber trat unmittelbar danach auf.
Hyperion
1
Die DLL-Dateien befinden sich im Erweiterungsordner, oder? Versuchen Sie auch, eine andere DLL zu kommentieren: extension=php_pdo.dllDies ist der Haupt-PDO-Treiber, auf den sich die datenbankspezifischen DLL verlassen.
Lainceline
Ja, sie existieren in diesem Ordner. Haben Sie nicht die extension=php_pdo.dllin der extnoch in derphp.ini
Hyperion
Können Sie ein schnelles PHP-Skript mit erstellen phpinfo();? Sie erhalten das aktuelle Erweiterungsverzeichnis und die geladene php.ini. Möglicherweise liegt ein Konflikt vor.
Lainceline
Entschuldigung für die Verspätung. Ich werde die Informationen in den 1. Beitrag kopieren / einfügen. Danke vielmals.
Hyperion
47

Für PDOException: could not find driverfür MySQLund wenn es Debianauf Betriebssystem basiert,

sudo apt-get -y install php5-mysql
Nasif Md. Tanjim
quelle
8
Und wenn Sie PostgreSQL auf einem modernen Debian-basierten Betriebssystem verwenden, ist es sudo apt-get -y install php7.0-pgsql.
Ben Johnson
30

Für PHP 7 in Ubuntu können Sie außerdem Folgendes tun:

sudo apt-get install php7.0-pgsql

Jetzt können Sie also keine Zeilen mehr auskommentieren php.ini

UPD: Ich habe den gleichen Fehler, daher lag das Problem nicht im Treiber. Ich habe meine geändert database.ini, aber jedes Mal, wenn ich einen Fehler sah. Und ich ändere die Datenbankkonfiguration .envund Fehler sind verschwunden.

Святослав Павленко
quelle
Dies war das einzige, was für mich unter Ubuntu funktionierte (versuchte, Kommentare in der php.ini ohne Kommentar zu entfernen)
Ben Wilson
3
gelöst damit, in meinem Fall verwendensudo apt-get install php7.1-pgsql
Cesar Romero
Vielen Dank. gelöst damit, in meinem Fall verwenden sudo apt-get install php7.4-pgsql
Mauro Lacerda
9

Das hat bei mir funktioniert:

$ sudo apt-get install php-gd php-mysql

Glücklich
quelle
Funktioniert wie ein Zaubermann !! Thanks :)
dev_dodiya vor
7

Ich hatte das gleiche Problem. Das hat bei mir funktioniert.

Es gibt 2 php.ini-Dateien:

  • C: \ wamp \ bin \ apache \ apache2.4.9 \ bin
  • C: \ wamp \ bin \ php \ php5.5.12

HINWEIS: Dies verwendet meine Version von PHP und Apache. Ändern Sie Ihre Version.

Die Datei php.ini in beiden Ordnern muss aktualisiert werden. Die Erweiterungen:

  • extension = php_pdo_pgsql.dll
  • extension = php_pgsql.dll

Diese müssen Sie auskommentieren (entfernen Sie das; -Symbol).

Starten Sie sowohl Wamp als auch die Eingabeaufforderung neu.

Hoffentlich klappt es bei dir :).

user3293860
quelle
Schließlich! Ich habe es 2 Stunden lang unter Windows 10 Wamp Server versucht, und das Problem war, dass die Optionen von Wamp nur die Datei php.ini im Apache-Ordner betreffen, nicht jedoch im PHP-Ordner. Danke vielmals!
Borjovsky
Arbeitete wie Magie für mich
CHIWETELU JOHNPAUL CHIDERA vor
7

Mir ist klar, dass dies eine alte Frage ist, aber ich habe sie in einer Google-Suche gefunden, also werde ich fortfahren und antworten, nur für den Fall, dass jemand anderes darauf stößt. Ich bin auf einem Mac und hatte das gleiche Problem, habe es aber mit HomeBrew gelöst . Sobald Sie es installiert haben, können Sie einfach diesen Befehl ausführen:

brew install php56-pdo-pgsql

Und ersetzen Sie die 56 durch eine beliebige Version von PHP, die Sie ohne Dezimalpunkt verwenden.

William Brawner
quelle
4
sudo apt-get install php7.1-pgsql
Sujal Patel
quelle
2

Ich habe auch dieses Problem. Ich habe dieses Problem bereits gelöst. Wenn Sie Wamp verwenden, führen Sie die folgenden Schritte aus.

  1. Gehe zu wamp64/www/bin/php/php*(wo *ist die PHP-Version, die du verwendest)
  2. Bearbeiten Sie die Datei PHP und kommentieren Sie diese Zeile aus, indem Sie das Semikolon entfernen:
;extension=pdo_pgsql to extension=pdo_pgsql
  1. Speichern Sie Ihren Wamp-Server und starten Sie ihn neu

Wenn es nicht funktioniert, überprüfen Sie bitte Ihre .envund config / database erneut.

Phantih
quelle
1

Ich hatte den gleichen Fehler auf PHP 7.3.7 Docker mit Laravel:

Das funktioniert bei mir

apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pgsql pdo_pgsql

Dadurch werden die Treiber pgsql und pdo_pgsql installiert.

Führen Sie nun diesen Befehl aus, um die Zeilen extension = pdo_pgsql.so und extension = pgsql.so von php.ini zu entfernen

sed -ri -e 's!;extension=pdo_pgsql!extension=pdo_pgsql!' $PHP_INI_DIR/php.ini

sed -ri -e 's!;extension=pgsql!extension=pgsql!' $PHP_INI_DIR/php.ini
Asche
quelle
0

Wenn Sie Postgresql unter OpenSuse (und Co.) verwenden möchten, versuchen Sie Folgendes:

zypper --no-refresh in php5-pgsql
nemesisfixx
quelle
0

Nach 3 Stunden gelöst ... Ich verwende WAMP (PHP 7.2.4), PostgreSQL 10, Laravel 5.6.29. Geladene PHP-Erweiterungen (pgsql, pdo_pgsql) von Wampserver 3.3, dann konnte ich mit einem einfachen PHP-Testcode aus dem www-Verzeichnis eine Verbindung zum PostgreSQL-Server herstellen. Aber $ php artisan migrateimmer noch zurückgekehrt

PDOException: :( "Treiber konnte nicht gefunden werden")

Ich habe die Shell (Git Bash für Windows) überprüft $ php --ini, die C: \ wamp64 \ bin \ php \ php7.2.4 \ php.ini anstelle von c: \ wamp64 \ bin \ apache \ apache2.4.33 \ bin \ php.ini zurückgegeben hat , geladen von WAMP Sie müssen also die Erweiterungen pgsql und pdo_pgsql auch in C: \ wamp64 \ bin \ php \ php7.2.4 \ php.ini auskommentieren, und dann funktioniert die Migration ...

Jozsa-Csiki Lorant Csaba
quelle
0

In Windows 8-PCs mit Laragon 3.4.0 180809 hatte ich das gleiche Problem. In meinem Fall ist es passiert, weil ich Laragon aktualisiert und eine neue Version von PHP hinzugefügt habe. Also hatte laragon/bin/php/ich tatsächlich zwei Verzeichnisse:

  • php-7.1.20-Win32-VC14-x64
  • php-7.1.7-Win32-VC14-x64

Ich habe 7.1.20in meine PATHVariable hinzugefügt . In meiner Befehlskonsole zeigte das Ausführen php --inijedoch, dass der Pfad tatsächlich vom älteren abgerufen wurde : php-7.1.7-Win32-VC14-x64. Also habe ich die alte gelöscht (aus Sicherheitsgründen habe ich sie in den Papierkorb gelegt). Aber Laragon konnte danach nicht starten.

Also habe laragaon/etc/apache2/mod_php.confich in den Pfad zur neuesten PHP-Version geändert. Starten Sie dann Laragon neu und das Problem ist behoben. 😊

Referenz: So fügen Sie eine weitere PHP-Version hinzu - Laragon Forum

Mayeenul Islam
quelle
0

Unter Linux (Ubuntu) installieren Sie den Treiber einfach wie folgt:

sudo apt-get install php-pgsql

Dadurch wird der Treiber unter Verwendung Ihrer aktuellen PHP-Version installiert.

Tafadzwa L Nyamukapa
quelle
-1

Alter Thread, den ich kenne, aber ich habe ein paar Stunden meines Lebens damit verloren. Sie müssen auch die DB-Informationen in der ENV-Datei festlegen. Sie müssen nicht haben , um den Treiber hier angeben , da der Standard in database.php angegeben verwendet wird (glaube ich). Ich hatte DB_CONNECTION=mysqlProbleme, weil es in der .env-Datei war und ich pgsql verwendete.

Mark D.
quelle
-1

sudo apt-get -y installiere php * -mysql (führe einfach diesen Befehl aus)

Al Imrun Showrov
quelle
-2

Das hat bei mir funktioniert:

$ sudo apt-get -y install php5.6-pgsql
$ sudo service apache2 restart

Ich arbeite mit 32bit Ubuntu 14

Nouks
quelle
-2

Ich sehe, dass Sie Windows verwenden. Ich konnte dies nicht beheben, indem ich eine der Erweiterungen aktivierte, die mit meinem Windows WAMP Server geliefert wurden. Ich habe PDO_ODBC und andere ausprobiert und sogar das Microsoft Official PDO_SQLSRV gefunden .

Die Lösung für mich bestand darin, die PDO_SQLSRV-Treiber von einer Website eines Drittanbieters zu installieren. Ich habe die Treiber über http://robsphp.blogspot.nl/2012/06/unofficial-microsoft-sql-server-driver.html gefunden

Normalerweise verwende ich keine DLLs von zufälligen Websites, aber ich war verzweifelt und das hat bei mir funktioniert. In der Hoffnung, dass dies anderen viele Stunden Frust ersparen könnte.

Neo
quelle
-4

Die Verwendung von Laravel V 5.5.39 mit Php 7.1.12 funktioniert einwandfrei , aber spätere (neuere) PHP-Versionen verursachen das Problem. Wenn Sie also die PHP-Version ändern, erhalten Sie die Lösung zu 100% .

Hashmat Waziri
quelle