好的,这是我几个星期以来一直在努力的事情,所以请耐心等待。当我设置我的 postgres 数据库时,我只想通过本地 Unix 套接字连接到它。就像我如何设置我的 MySQL 数据库以及我为它编写的后续 PHP 脚本一样。因此,我的 pg_hba.conf 文件的底部看起来像这样:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
#host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 md5
我曾经并且现在仍然能够通过 psql 命令行实用程序与我的数据库交互,并且可以毫无问题地做任何我需要做的事情。但是,当我尝试编写一个简单的 PHP 脚本来连接数据库时,它总是会失败:
<?php
$dbhost = "localhost";
$dbname = "postgres";
$dbuser = "postgres";
$dbpassword = "####";
$conn_string = "host=$dbhost dbname=$dbname user=$dbuser password=$dbpassword";
$dbconn = pg_connect($conn_string);
if($dbconn)
{
echo "<p>Win!</p>";
}
else
{
echo "<p>Connect failed!</p>";
exit();
}
pg_close($dbconn);
?>
几个星期以来,我对于为什么 PHP 不能建立一个简单的 Unix 套接字连接感到非常困惑,尤其是在为我的 MySQL 数据库使用本地连接的 mysqli 库编写了很多脚本之后!然而,我终于取消了与环回地址相关的行的注释,并且它突然起作用了!这向我表明,当 'localhost' 作为 pg_connect 的主机参数传递时,它使用环回接口,而不仅仅是本地 Unix 套接字。
这不是世界末日,但有没有办法以某种方式使用 PHP,以便它通过本地 Unix 套接字连接,或者它不支持这种与 postgresql 的连接?