【问题标题】:Laravel 5 with Postgres SQLLaravel 5 与 Postgresql
【发布时间】:2015-08-09 09:59:31
【问题描述】:

我正在使用 postgres 作为数据库的 Laravel 5。我已经配置了 postgres 9.4 和 pgAdmin III,它们都可以正常工作。当我尝试运行迁移时,它给了我错误:

[PDO异常]
找不到驱动程序

这是我的数据库.php

'default' => 'pgsql',

'pgsql' => [            'driver'   => 'pgsql',          
                        'host'     => '127.0.0.1',          
                        'database' => 'fms',            
                        'username' => 'postgres',           
                        'password' => 'root',           
                        'charset'  => 'utf8',           
                        'prefix'   => '',           
                        'schema'   => 'public',         ],

虽然最初我是因为在 Windows 7 上配置了 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 上解决这个问题。

【问题讨论】:

  • 在你的php.ini 中你能取消extension=pdo_pgsql.so 的注释吗?

标签: php postgresql laravel pdo laravel-5


【解决方案1】:

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

'default' => 'pgsql',

你必须在你的php配置设置(php.ini)取消注释pdo和postgres共享对象

即,您需要在 php.ini 中取消注释以下行

extension=pdo_pgsql.so
extension=pgsql.so

注意:

在进行此更改后不要忘记停止并启动您的apache(或php-fpm,如果改用它)。

【讨论】:

【解决方案2】:

我遇到了 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-development”和“php.ini-production”(不需要取消注释这些文件)。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      就像@jeff 说的,这可能是由于没有在.env 文件中设置DB_CONNECTION=pgsql 造成的。 .env-文件已预配置 MySQL,因此您必须编辑此文件。

      【讨论】:

        【解决方案5】:

        您必须在

        中进行与数据库相关的更改
        1. config/database.php
        2. .env 文件

        和其他设置

        • php.ini 设置

        如果仍然出现错误,请清除缓存和配置

        php artisan cache:clear
        php artisan config:clear
        

        它现在应该可以工作了!

        【讨论】:

        • 我停止了运行 'php artisan:serve' 的命令,然后我运行你的命令并再次运行 'php artisan:serve' 并且成功了!非常感谢。
        • 我一切正常,我 100% 确定因为我尝试使用外部脚本,清除缓存和配置的部分做到了!谢谢
        【解决方案6】:

        运行此命令以轻松取消注释行 extension=pdo_pgsql.so 和 extension=pgsql.so 来自 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
        

        如果您还没有安装驱动程序,或者它给出了无法加载动态库 PGSQL 之类的错误,请运行:

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

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

        【讨论】:

          【解决方案7】:

          我正在使用 PHP7.3,这对我有用,我忘记了:

          apt-get install php7.3-pgsql
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-14
            • 2017-08-28
            • 1970-01-01
            • 2016-07-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多