1

我必须将带有 PostgreSQL 数据库的大型 PHP 应用程序迁移到 Rails。这是 OS X Lion Macbook Pro,使用现有的 Apache + PHP 安装。

我通过 Homebrew 安装了 PostgreSQL。假设主机是“localhost”,用户名是“my_username”,默认数据库是“my_db”。密码为空。结果如下:

我可以从命令行很好地访问数据库

psql -h localhost -U my_username -p 5432 my_db

没问题。这也有效:

psql -U my_username my_db

也没有问题。我也可以使用 Rails 访问数据库,非常容易,使用以下设置:

adapter: postgresql
encoding: sql_ascii
template: template0
database: my_db
pool: 5
username: my_username
password:

这一切都很好。但是在 PHP 中,当我这样做时

pg_connect("host=localhost port=5432 dbname=my_db user=my_username") or die(pg_last_error());

我收到这条消息:

LANG_FATAL_ERROR: LANG_DB_COULD_NOT_CONNECT
Access denied for user 'my_username'@'localhost' (using password: YES)

如果我从该行中删除“host=”,则留下:

pg_connect("port=5432 dbname=my_db user=my_username") or die(pg_last_error());

或者

pg_connect("dbname=my_db user=my_username") or die(pg_last_error());

我一无所获。pg_connect 返回false,表示没有连接,但是没有错误!pg_last_error() 什么也不返回。

我还尝试将 password='' 添加到连接字符串,但没有结果。

我非常努力地在 Stack Overflow、Google 等网站上找到有关此问题的任何参考资料,但没有运气。Stack Overflow 上有几个标题相似的问题,但不是这个特定问题。我在网上找到的只是为自己编译 pgsql.so 并确保扩展名列在 php.ini 中。我已经做到了零结果。

显然这不是 PostgreSQL 本身的问题,而是与 PHP 有关的问题。

请帮忙。谢谢。

4

1 回答 1

1

此错误消息:

用户'my_username'@'localhost'的访问被拒绝(使用密码:是)

是一个众所周知的MySQL错误消息,它与 pg_connect() 调用无关。

另请注意,不能期望 pg_last_error() 输出任何对连接失败有用的信息,因为它假定现有连接。必须在 PHP 错误输出中搜索与连接失败相关的错误消息。

于 2012-06-05T23:54:29.430 回答