环境配置:
- Ubuntu 16.04.1
- PostgreSQL 9.5.4 PHP 7.0
嗨,我尝试连接到我的postgresql db与php PDO
$DB_ADDR="127.0.0.1";
$DB_PORT="5432";
$DB_NAME="bddautfreq";
$DB_USR="postgres";
$DB_PWD="xxx";
try{
$bdd=new PDO ("pgsql:host=".$DB_ADDR.";port=".$DB_PORT.";dbname='".$DB_NAME."'",$DB_USR,"'".$DB_PWD."'");
}
catch (Exception $e)
{
die('Erreur connexion BDD: '.$e->getMessage());
}
但是这个错误发生了:
Erreur connexion BDD: SQLSTATE[08006] [7] FATAL: password authentication failed for user "postgres"
使用trust在我的pg_hba.conf文件中连接是ok的
host all all 127.0.0.1/32 trust
但不使用md5认证
host all all 127.0.0.1/32 md5
php7.0-pgsql模块已安装并启用:
gbdd@GBDD-HP:~$ ls /etc/php/7.0/mods-available/
calendar.ini fileinfo.ini iconv.ini pdo.ini phar.ini shmop.ini sysvsem.ini
ctype.ini ftp.ini json.ini pdo_pgsql.ini posix.ini sockets.ini sysvshm.ini
exif.ini gettext.ini opcache.ini pgsql.ini readline.ini sysvmsg.ini tokenizer.ini
我的postgresql.conf文件上的加密密码 与psql连接正常 我确定输入好的密码(与。pgpass相同)。对我来说,信任不是一个安全的解决方案。有人能帮助我了解我的apache, php或postgresql配置的错误吗?非常感谢!gbdd@GBDD-HP:~/bdd$ psql -U postgres -d bddautfreq
psql (9.5.4)
Type "help" for help.
bddautfreq=#
您缺少php_pdo_pgsql.dll
扩展名。
在php.ini中添加
安装php-pgsql
并启用它extension=php_pdo_pgsql.dll
错误来自PHP端。所有的身份验证问题都来自于我在密码变量两边加的单引号。
在php5中,以下语法可以正常运行(我在其他服务器上使用的语法):
$bdd=new PDO ("pgsql:host=".$DB_ADDR.";port=".$DB_PORT.";dbname='".$DB_NAME."'",$DB_USR,"'".$DB_PWD."'");
但是在php7中,它需要像这样删除所有的"'":
$bdd=new PDO ("pgsql:host=".$DB_ADDR.";port=".$DB_PORT.";dbname=$DB_NAME,$DB_USR,$DB_PWD);
即使我发现了自己的错误,我还是要祝贺社区的快速支持!