Php Laravel 5与Postgres SQL

Php Laravel 5与Postgres SQL,php,postgresql,laravel,pdo,laravel-5,Php,Postgresql,Laravel,Pdo,Laravel 5,我正在用postgres作为数据库开发Laravel5。我已经配置了postgres 9.4和pgAdmin III,它们工作正常。当我尝试运行“迁移”时,会出现以下错误: [PDO例外] 找不到驱动程序 这是我的database.php 'default' => 'pgsql', 'pgsql' => [ 'driver' => 'pgsql', 'host' =>

我正在用postgres作为数据库开发Laravel5。我已经配置了postgres 9.4和pgAdmin III,它们工作正常。当我尝试运行“迁移”时,会出现以下错误:

[PDO例外]
找不到驱动程序

这是我的database.php

'default' => 'pgsql',

'pgsql' => [            'driver'   => 'pgsql',          
                        'host'     => '127.0.0.1',          
                        'database' => 'fms',            
                        'username' => 'postgres',           
                        'password' => 'root',           
                        'charset'  => 'utf8',           
                        'prefix'   => '',           
                        'schema'   => 'public',         ],
起初我认为,这是因为Windows7上配置了postgres,但我尝试使用普通php,它工作得非常完美

<?php
   $host        = "host=127.0.0.1";
   $port        = "port=5432";
   $dbname      = "dbname=fms";

   $db = pg_connect( "$host $port $dbname user=postgres password=root"  );
   if(!$db){
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }
?>


我也在wamp中启用了php_pgsqlphp_pdo_sql。我不知道如何在laravel 5上修复此问题。

正如您所说,您已经选择默认数据库作为Postgres SQL

'default' => 'pgsql',
必须取消对php配置设置中pdo和postgres共享对象的注释
(php.ini)

i、 例如,您需要在php.ini中取消注释以下行

extension=pdo_pgsql.so
extension=pgsql.so
注意:


做了这些更改后,不要忘记停止并启动您的
apache
(或者
php-fpm
,如果改用它)。

我在Laravel-WAMP-PostgreSql驱动程序中也遇到了同样的问题,没有发现异常。我甚至像您一样成功地建立了与Postgre的直接连接,但使用“php artisan migrate”命令却没有成功

经过长时间的研究,我发现有多个php.ini文件,其中出现了“extension=php_pdo_pgsql.dll”和“extension=php_pgsql.dll”

当然,解决方案是取消注释以下文件中的扩展名:

  • ~/wamp/bin/php/php5.5.*/php.ini
  • ~/wamp/bin/php/php5.5.*/phpForApache
  • ~/wamp/bin/php/php5.5.*/php.ini.install
  • ~/wamp/bin/php/php5.5.*/php.ini-development
  • ~/wamp/bin/php/php5.5.*/php.ini-production 及
  • ~/wamp/bin/apache/apache2.4.9/php.ini

**您可以省去“php.ini开发”和“php.ini生产”(不需要取消注释这些文件)。

您需要修改.env文件,然后转到config>database.php并将默认值更改为pgsql,并且在所有模型文件中,您还需要更改$protected$connection='pgsql'

就像@jeff所说的,这可能是因为没有在
.env
-文件中设置
DB\u CONNECTION=pgsql
.env
-文件已预配置MySQL,因此您必须编辑此文件。

您必须在

  • config/database.php
  • .env文件
  • 和中的其他设置

    • php.ini设置
    如果仍然出现错误,请清除缓存和配置

    php artisan cache:clear
    php artisan config:clear
    

    现在应该可以了

    运行此命令可以轻松地从php.ini中取消对extension=pdo_pgsql.so和extension=pgsql.so行的注释

    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
    
    如果尚未安装驱动程序,或出现无法加载动态库PGSQL之类的错误,请运行以下命令:

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

    这将安装pgsql和pdo_pgsql驱动程序。

    我使用的是PHP7.3,这对我很有效,我忘记了这一点:

    apt-get install php7.3-pgsql
    

    之后一切都很顺利。只要使用您正在使用的PHP的任何版本。

    在您的
    PHP.ini
    中,您可以取消对
    扩展名=pdo_pgsql.so
    的注释吗?我停止了运行“PHP artisan:serve”的命令,然后运行您的命令,然后再次运行“PHP artisan:serve”,这就成功了!。非常感谢。我一切都很好,我100%确定,因为我尝试使用外部脚本,清除缓存和配置的一部分做到了!thanksI运行了
    sudo apt安装php7.4-pgsql
    ,然后
    服务php7.4-fpm重启
    ,但我仍然得到“无法加载动态库'pdo_pgsql'”