Ich versuche, mich über Laravel mit der PostgreSQL-Datenbank zu verbinden, um eine Php-Handwerker-Migration durchzuführen, scheint aber nicht gerichtet zu sein, da sie den Datenbanknamen von MySQL liest.
Hier sind die Befehle von 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.
php.ini
-Datei wurde in Apache, WAMP (aus dem Ordner php) und PostgreSQL geprüft. Der extension_dir
ist korrekt so wie er ist -> extension_dir = "c:/wamp/bin/php/php5.5.12/ext/"
Der extension=pdo_pgsql.dll
und extension=pgsql.dll
sind unkommentiert.
Machen Sie den Trick PATH
in den 'System Variables' und starten Sie ihn neu. Keine Chance.
Danke für die bisherige Hilfe.
Dies sind meine Treiber php_pdo_driver.h
& php_pdo.h
von C:\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" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci = C:\php-sdk\Oracle\x64\instantclient10\sdk, shared" "--with-oci8 = C:\php-sdk\Oracle\x64\instantclient10\sdk, shared" "--with-oci8-11g = C:\php-sdk\Oracle\x64\instantclient11\sdk, shared" "--enable-object-out-dir = ../obj /" "--enable-com-dotnet = shared" "--with-mcrypt = static" "--disable-static-analysis" "--with-pgo"
Stellen Sie sicher, dass Sie den Schlüssel 'default'
in app/config/database.php
konfigurieren.
Für Postgres wäre dies 'default' => 'postgres',
Wenn Sie einen [PDOException] could not find driver
-Fehler erhalten, prüfen Sie, ob Sie die korrekte PHP -Erweiterung installiert haben. Sie müssen pdo_pgsql.so
und pgsql.so
installiert und aktiviert haben. Anweisungen dazu sind von Betriebssystem zu Betriebssystem unterschiedlich.
Für Windows sollten die pgsql
-Erweiterungen mit der offiziellen PHP -Distribution vorinstalliert sein. Bearbeiten Sie einfach Ihren php.ini
und kommentieren Sie die Zeilen extension=pdo_pgsql.so
und extension=pgsql.so
aus.
Stellen Sie außerdem sicher, dass in php.ini
extension_dir
auf das richtige Verzeichnis eingestellt ist. Es sollte ein Ordner namens extensions
oder ext
oder ein ähnlicher Ordner im Installationsverzeichnis von PHP sein.
Kopieren Sie schließlich libpq.dll
von C:\wamp\bin\php\php5.*\
in C:\wamp\bin\Apache*\bin
und starten Sie alle Dienste über die WampServer-Schnittstelle neu.
Wenn Sie immer noch die Ausnahme erhalten, müssen Sie möglicherweise das Postgres-Verzeichnis \bin
zu Ihrer PATH
hinzufügen:
PATH
.Dies sollte hoffentlich Probleme lösen. Weitere Informationen finden Sie unter:
Für PDOException: could not find driver
für MySQL
und wenn es Debian
-basiertes Betriebssystem ist,
Sudo apt-get -y install php5-mysql
Für PHP 7 in Ubuntu können Sie auch Folgendes tun:
Sudo apt-get install php7.0-pgsql
So können Sie jetzt Zeilen in php.ini
nicht auskommentieren
UPD: Ich habe den gleichen Fehler, also war das Problem nicht im Treiber. Ich änderte meinen database.ini
, aber jedes Mal, wenn ich einen Fehler sah, __. Und ich ändere die Datenbankkonfiguration in .env
und Fehler Weg.
Ich weiß, dass dies eine alte Frage ist, aber ich habe sie in einer Google-Suche gefunden. Ich werde also weitergehen und antworten, nur falls jemand anderes darüber stößt. Ich bin auf einem Mac und hatte das gleiche Problem, aber es wurde 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 Dezimalzeichen verwenden.
Das hat für mich funktioniert:
$ Sudo apt-get install php-Gd php-mysql
Ich hatte das gleiche Problem. Das hat bei mir funktioniert.
Es gibt 2 php.ini-Dateien:
ANMERKUNG: Dies ist meine Version von PHP und Apache. Ändern Sie Ihre Version.
Die Datei php.ini, die sich in den beiden Ordnern befindet, ist das, was Sie aktualisieren müssen, die Erweiterungen:
Dies ist das, was Sie zum Auskommentieren benötigen (das Symbol; entfernen).
Starten Sie Wamp und die Eingabeaufforderung neu.
Hoffentlich klappt es für Sie :).
Sudo apt-get install php7.1-pgsql
Ich habe auch dieses Problem. Ich habe dieses Problem bereits gelöst. Wenn Sie Wamp verwenden, führen Sie die folgenden Schritte aus.
- Gehen Sie zu
wamp64/www/bin/php/php*
(wobei*
die von Ihnen verwendete PHP-Version ist).- Bearbeiten Sie die Datei php und entfernen Sie das Kommentarzeichen durch Entfernen des Semikolons:
;extension=pdo_pgsql to extension=pdo_pgsql
- Speichern Sie Ihren Wamp-Server und starten Sie ihn erneut
Wenn dies nicht funktioniert, überprüfen Sie bitte Ihren .env
und die config/database erneut.
In meinem Fall hatte ich zwei Versionen von PHP installiert. Also musste ich nur noch benutzen
$ /opt/lampp/bin/php artisan serve
statt
$ php artisan serve
Ich hatte den gleichen Fehler bei 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 aus der Datei 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
Bei Windows 8 PC mit Laragon 3.4.0 180809 hatte ich das gleiche Problem. In meinem Fall passierte es, weil ich Laragon aktualisiert und eine neue Version von PHP hinzugefügt habe. In laragon/bin/php/
hatte ich tatsächlich zwei Verzeichnisse:
php-7.1.20-Win32-VC14-x64
php-7.1.7-Win32-VC14-x64
Ich habe 7.1.20
in meine Variable PATH
eingefügt. In meiner Befehlskonsole zeigte die Ausführung von php --ini
jedoch an, dass der Pfad tatsächlich von der älteren Version abgerufen wurde: php-7.1.7-Win32-VC14-x64
. Also habe ich die alte gelöscht (zur Sicherheit habe ich sie in den Papierkorb gestellt). Aber Laragon konnte danach nicht starten.
Also änderte ich in laragaon/etc/Apache2/mod_php.conf
den Pfad auf die neueste Version von PHP. Dann wurde Laragon neu gestartet und das Problem wurde behoben. ????
Referenz: So fügen Sie eine andere PHP -Version hinzu - Laragon Forum
Gelöst nach 3 Stunden ... 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 mich mit einem einfachen PHP-Testcode aus dem Verzeichnis www mit dem PostgreSQL-Server verbinden. Aber $ php artisan migrate
kam immer noch zurück
PDOException: :( "Treiber wurde nicht gefunden")
Ich habe die Shell (git bash for windows) mit $ php --ini
überprüft, das C:\wamp64\bin\php\php7.2.4\php.ini anstelle von c:\wamp64\bin\Apache\apache2.4.33\bin\php zurückgibt. ini, geladen von WAMPSo müssen Sie die Erweiterungen pgsql und pdo_pgsql auch in C:\wamp64\bin\php\php7.2.4\php.ini dekommentieren und dann funktioniert die Migration ...
Wenn Sie Postgresql für OpenSuse (und co) verwenden möchten, versuchen Sie Folgendes:
zypper --no-refresh in php5-pgsql
Alter Faden, den ich kenne, aber ich habe damit ein paar Stunden meines Lebens verloren. Sie müssen auch die DB-Informationen in der .env-Datei festlegen. Sie haben nicht have , um den Treiber hier anzugeben, da der in database.php angegebene Standard verwendet wird (denke ich). Ich hatte Probleme, weil es DB_CONNECTION=mysql
in der .env-Datei hatte und ich pgsql verwendete.