web-dev-qa-db-fra.com

Laravel: erreur [PDOException]: impossible de trouver le pilote dans PostgreSQL

J'essaie de me connecter à la base de données PostgreSQL via Laravel afin d'effectuer une migration artisanale php mais ne semble pas être dirigé car il lit le nom de la base de données MySQL. 

Voici les commandes de 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'   => '',
    ),

),

Si je supprime les chemins MySQL, je vais obtenir:

[InvalidArgumentException]
Database [mysql] not configured.


EDIT: Lorsque j'essaie de faire une migration php artisan, je reçois une "PDOException: impossible de trouver le pilote". J'utilise WAMP et je suis dans Win8.1. Utiliser PostgreSQL comme base de données.


EDIT: J'ai expérimenté une série de solutions alternatives mais je dois encore résoudre ce problème . Le fichier php.ini a été vérifié dans Apache, WAMP (depuis le dossier php) et PostgreSQL. Le extension_dir est correct, car -> extension_dir = "c:/wamp/bin/php/php5.5.12/ext/"

Les extension=pdo_pgsql.dll et extension=pgsql.dll ne sont pas commentés.

Fait l'astuce PATH dans les 'Variables système' et redémarré. Aucune chance. 

Merci du coup de main jusqu'à présent.

Ce sont mes pilotes php_pdo_driver.h & php_pdo.h de C:\Program Files (x86)\PostgreSQL\EnterpriseDB-ApachePHP\php\SDK\include\ext\pdo

Information de phpinfo:

PHP version 5.5.12

Compilateur MSVC11 (Visual C++ 2012) Configurez la commande 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, partagé" "--with-oci8 = C:\php-sdk\Oracle\x64\instantclient10\sdk, partagé" "--with-oci8-11g = C:\php-sdk\Oracle\x64\instantclient11\sdk, partagé" "--enable-object-out-dir = ../obj /" "--enable-com-dotnet = shared" "--with-mcrypt = static" "--disable-static-analyse" "--with-pgo"

54
Hyperion

Assurez-vous de configurer la clé 'default' dans app/config/database.php

Pour postgres, ce serait 'default' => 'postgres',

Si vous recevez une erreur [PDOException] could not find driver, vérifiez si les extensions PHP appropriées sont installées. pdo_pgsql.so et pgsql.so doivent être installés et activés. Les instructions sur la façon de procéder varient selon les systèmes d'exploitation. 

Pour Windows, les extensions pgsql devraient être pré-téléchargées avec la distribution officielle PHP. Editez simplement votre php.ini et décommentez les lignes extension=pdo_pgsql.so et extension=pgsql.so

De même, dans php.ini, assurez-vous que extension_dir est défini sur le répertoire approprié. Il devrait s'agir d'un dossier appelé extensions ou ext ou similaire dans votre répertoire d'installation PHP.

Enfin, copiez libpq.dll de C:\wamp\bin\php\php5.*\ dans C:\wamp\bin\Apache*\bin et redémarrez tous les services via l'interface WampServer.

Si vous obtenez toujours l'exception, vous devrez peut-être ajouter le répertoire postgres \bin à votre PATH:

  1. Propriétés système -> onglet Avancé -> Variables d'environnement
  2. Dans le groupe 'Variables système' dans la moitié inférieure de la fenêtre, faites défiler et trouvez l'entrée PATH.
  3. Sélectionnez-le et cliquez sur Modifier
  4. À la fin de l'entrée existante, indiquez le chemin d'accès complet à votre répertoire postgres bin. Le dossier bin doit être situé à la racine de votre répertoire d'installation postgres.
  5. Redémarrez les invites de commande ouvertes ou, pour être certain, redémarrez votre ordinateur.

Cela devrait, espérons-le, résoudre tous les problèmes. Pour plus d'informations, voir:

57
lainceline

Pour PDOException: could not find driver pour MySQL, et s'il s'agit d'un système d'exploitation basé sur Debian,

Sudo apt-get -y install php5-mysql
43
Nasif Md. Tanjim

Pour PHP 7 dans Ubuntu, vous pouvez également effectuer les tâches suivantes:

Sudo apt-get install php7.0-pgsql

Donc, maintenant, vous ne pouvez pas supprimer les lignes de commentaire dans php.ini

UPD: J'ai la même erreur, le problème n'était donc pas dans le pilote . J'ai changé mon database.ini, mais chaque fois que j'ai vu une erreur ., Et je change de base de données dans .env et les erreurs ont disparu.

Je me rends compte que c’est une vieille question, mais je l’ai trouvée dans une recherche Google. Je vais donc y répondre au cas où une autre personne l’aurait trouvée. Je suis sur un Mac et j'ai le même problème, mais je l'ai résolu en utilisant HomeBrew . Une fois que vous l'avez installé, vous pouvez simplement exécuter cette commande:

brew install php56-pdo-pgsql

Et remplacez le 56 par la version de PHP que vous utilisez sans le signe décimal.

8
Billy Brawner

Cela a fonctionné pour moi:

$ Sudo apt-get install php-Gd php-mysql

7
Lucky

J'ai eu le même problème. C'est ce qui a fonctionné pour moi.

Il y a 2 fichiers php.ini:

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

NOTE: Ceci utilise ma version de PHP et Apache, changez pour ce que vous êtes.

Le fichier php.ini situé dans les deux dossiers est ce que vous devez mettre à jour, les extensions:

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

Ce sont ce dont vous avez besoin pour commenter (enlevez le symbole;).

Redémarrez Wamp et l'invite de commande.

Espérons que cela fonctionnera pour vous :).

5
user3293860
Sudo apt-get install php7.1-pgsql
4
Sujal Patel

J'ai aussi ce problème. J'ai déjà résolu ce problème. Si vous utilisez Wamp, procédez comme suit.

  1. Allez à wamp64/www/bin/php/php* (où * est la version de PHP que vous utilisez)
  2. Editez le fichier php et décommentez cette ligne en supprimant le point-virgule:
;extension=pdo_pgsql to extension=pdo_pgsql
  1. Enregistrez et redémarrez votre serveur Wamp

Si cela ne fonctionne pas, veuillez vérifier votre .env et votre configuration/base de données à nouveau.

1
Phantih

Dans mon cas, j'avais deux versions de PHP installées. Donc tout ce que j'avais à faire était d'utiliser

$ /opt/lampp/bin/php artisan serve au lieu de 

$ php artisan serve 

0
Tejas

J'ai eu la même erreur sur PHP 7.3.7 docker avec laravel:

Ça marche pour moi

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

Cela installera les pilotes pgsql et pdo_pgsql.

Maintenant, lancez cette commande pour supprimer les commentaires des lignes extension = pdo_pgsql.so et extension = pgsql.so de php.ini

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
0
Ash

Dans Windows 8 PC avec Laragon 3.4.0 180809, je faisais face au même problème. C'est arrivé dans mon cas parce que j'ai mis à jour Laragon et qu'il a ajouté une nouvelle version de PHP. Donc, dans laragon/bin/php/ j'avais en fait deux répertoires:

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

J'ai ajouté 7.1.20 dans ma variable PATH. Mais dans ma console de commande, exécuter php --ini montrait que le chemin était en réalité celui de l'ancien: php-7.1.7-Win32-VC14-x64. J'ai donc supprimé l'ancien (pour des raisons de sécurité, je l'ai mis dans la corbeille). Mais Laragon n'a pas pu commencer après cela.

Donc, dans laragaon/etc/Apache2/mod_php.conf, j'ai changé le chemin d'accès à la dernière version PHP. Laragon a ensuite redémarré et le problème est résolu. ????

Référence: Comment ajouter une autre version PHP - Forum Laragon

0
Mayeenul Islam

Résolu après 3 heures ... J'utilise WAMP (PHP 7.2.4), PostgreSQL 10, Laravel 5.6.29. J'ai chargé PHP extensions (pgsql, pdo_pgsql) depuis Wampserver 3.3, puis j’ai pu me connecter au serveur PostgreSQL avec un simple code de test php du répertoire www. Mais $ php artisan migrate est toujours retourné 

PDOException: :( "pilote introuvable")

J'ai vérifié le shell (git bash pour Windows) avec $ php --ini, qui a renvoyé C:\wamp64\bin\php\php7.2.4\php.ini au lieu de c:\wamp64\bin\Apache\apache2.4.33\bin\php. ini, chargé par WAMPVous devez donc supprimer les commentaires de vos extensions pgsql et pdo_pgsql également dans C:\wamp64\bin\php\php7.2.4\php.ini, puis migrez ...

0

J'étais sur l'hébergement partagé et je devais activer tous les pdo 

 Like this image shows

0
Black Mamba

Pour ceux qui souhaitent utiliser Postgresql sur OpenSuse (et autres), essayez ce qui suit:

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

Vieux fil que je connais, mais j’ai perdu quelques heures de ma vie avec ça. Vous devez également définir les informations de base de données dans le fichier .env. Vous n'avez pas devez pour spécifier le pilote ici car la valeur par défaut spécifiée dans database.php est utilisée (je pense). Je me débattais parce qu'il y avait DB_CONNECTION=mysql dans le fichier .env et que j'utilisais pgsql.

0
Mark D