Php Laravel 5与Postgres SQL
我正在用postgres作为数据库开发Laravel5。我已经配置了postgres 9.4和pgAdmin III,它们工作正常。当我尝试运行“迁移”时,会出现以下错误: [PDO例外]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' =>
找不到驱动程序 这是我的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_pgsql和php_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,因此您必须编辑此文件。您必须在
- 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'”