环境配置:
嗨,我尝试使用 php PDO
连接到我的postgresql数据库$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"
在我的pg_hba.conf文件中使用 trust 连接正常
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 的连接正常
gbdd@GBDD-HP:~/bdd$ psql -U postgres -d bddautfreq
psql (9.5.4)
Type "help" for help.
bddautfreq=#
我一定要输入好的密码(与.pgpass相同)。对我来说,信任不是一个安全的解决方案。有人可以帮助我理解我的apache,php或postgresql配置的错误吗?非常感谢!
答案 0 :(得分:0)
您遗失了php_pdo_pgsql.dll
个扩展名。
通过添加
安装php-pgsql
并在 php.ini 中启用它
extension=php_pdo_pgsql.dll
答案 1 :(得分:0)
错误来自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);
即使我发现自己的错误,我也要祝贺社区的快速支持!