尝试使用php连接到PostgreSQL数据库时,密码md5身份验证失败

时间:2016-10-13 07:27:59

标签: php postgresql pdo

环境配置:

  • Ubuntu 16.04.1
  • PostgreSQL 9.5.4
  • PHP 7.0

嗨,我尝试使用 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配置的错误吗?非常感谢!

2 个答案:

答案 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);

即使我发现自己的错误,我也要祝贺社区的快速支持!