【问题标题】:OS X Lion + PHP + PostgreSQL, pg_connect returns nothingOS X Lion + PHP + PostgreSQL,pg_connect 什么都不返回
【发布时间】:2012-06-05 21:40:30
【问题描述】:

我必须将带有 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() 什么也不返回。

我也尝试在连接字符串中添加密码='',但没有结果。

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

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

请帮忙。谢谢。

【问题讨论】:

    标签: php postgresql osx-lion


    【解决方案1】:

    这个错误信息:

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

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

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

    【讨论】:

    • 我知道这看起来像是一条 MySQL 错误消息。但是再看一下 PHP:被调用的函数是 pg_connect()。它与 MySQL 无关。不过,我最终确实解决了这个问题。感谢您的尝试。
    • @LonnyEachus “不过,我最终还是解决了这个问题”......如果您能与我们其他人分享,那就太好了!毕竟,这就是你要我们做的,对吧?
    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2015-11-18
    • 2023-04-10
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多