我正在尝试从PHP连接到PostgreSQL上的Heroku。为了简化,我试着:
function pg_connection_string_from_database_url() {
extract(parse_url(getenv("DATABASE_URL")));
return "user=$user password=$pass host=$host sslmode=require dbname=" . substr($path, 1);
}
$pg_conn = pg_connect(pg_connection_string_from_database_url());
我一直得到这个错误:
FATAL: password authentication failed for user
我试过:
- 使用Navicat: works连接相同的凭据
- 使用PHP连接本地pgsql数据库:works
- 从CLI连接相同的凭据:works
这让我觉得PHP应该对密码做些什么。我在网上找到了一些关于MD5的东西,但是找不到任何具体的。
你知道怎么解决这个问题吗?
这里可以正常工作:
~ dzuelke$ heroku run bash
Running `bash` attached to terminal... up, run.4366
~ $ php -r '
> function pg_connection_string_from_database_url() {
> extract(parse_url(getenv("DATABASE_URL")));
> return "user=$user password=$pass host=$host sslmode=require dbname=" . substr($path, 1);
> }
> $pg_conn = pg_connect(pg_connection_string_from_database_url());
> var_dump($pg_conn);'
resource(4) of type (pgsql link)
双重和三重检查你的DATABASE_URL
是正确的,这是你想要使用的实际连接(相对于另一个env var), getenv("DATABASE_URL")
返回什么值,等等。
同样,你没有指定端口;所以它将使用默认的5432,这可能不正确。