我已经设置了一个测试服务器并安装了 PHP 5.4(带有 Nginx 的 zend 服务器)和 postgresql 9.1。
我正在尝试使用以下代码连接到 postgresql 数据库:
define('DB_TYPE', 'pgsql');
define('DB_HOST', 'localhost');
define('DB_PORT', 5432);
define('DB_NAME', 'rockprofile');
define('DB_USERNAME', 'rockprofile');
define('DB_PASSWORD', 'PASSWORD');
$dsn = DB_TYPE . ':dbname=' . DB_NAME . ';host=' . DB_HOST . ';port=' . DB_PORT;
try {
$db = new PDO($dsn, DB_USERNAME, DB_PASSWORD);
} catch (PDOException $e) {
echo $e->getMessage();
print_r($e->getTrace());
}
但是,这会产生以下内容:
SQLSTATE[08006] [7] FATAL: Ident authentication failed for user "rockprofile"
Array (
[0] => Array (
[file] => /usr/share/nginx/inc/config.php
[line] => 24
[function] => __construct
[class] => PDO
[type] => -> [args] => Array (
[0] => pgsql:dbname=rockprofile;host=localhost;port=5432
[1] => rockprofile
[2] => PASSWORD ) )
[1] => Array ( [file] => /usr/share/nginx/bands/index.php
[line] => 2
[args] => Array (
[0] => /usr/share/nginx/inc/config.php )
[function] => include ) )
如您所见,我正在使用本地主机。我知道 dsn 是正确的,包括用户名和密码,因为如果我用本地 192 IP 替换 localhost 就可以了。我怀疑这是postgresql的配置问题,以下是当前内容:
local all all peer
host all all 127.0.0.1/32 ident
host all all ::1/128 ident
host all all 192.168.1.0/24 md5
在搜索某人似乎通过将 ident 更改为信任上面的配置来解决这个问题,但这对我来说没有帮助。
这可能是我需要添加的简单内容,但目前搜索似乎没有结果。谁能告诉我如何纠正这个问题。
*-----编辑----- *
根据 Daniel Vérité 修复问题的回应,ident 需要更改为 MD5。我个人不得不为 IPv4 和 IPv6 条目更改此设置。
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host all all 192.168.1.0/24 md5