2015-05-30 43 views
1

我试图在Heroku上从PHP连接到PostgreSQL。为了简化我想:Heroku PHP pgconnect - 用户密码验证失败

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相同的凭据连接:工作
  • 连接到使用PHP的本地pgsql数据库:工程
  • 使用C LI:作品

这让我觉得PHP应该对密码做些什么。我在网上发现了一些关于MD5的东西,但找不到任何具体的东西。

任何想法如何解决这个问题?

回答

0

这里工作的罚款:

~ 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是正确的,这是您要使用(而不是其他的环境变量),什么样的价值getenv("DATABASE_URL")返回的实际连接,等等。

此外,你没有指定一个端口;所以它会使用默认的5432,这可能是不正确的。

+0

我忘了提到我正在从另一个Heroku应用程序(制作)连接(Heroku爱好开发)到postgres数据库。上面的代码在连接到本地数据库时确实有效。 – JeroenJ

+0

那么你的'DATABASE_URL'可能是错的,或者你需要从具有正确凭证的不同env var中读取? – dzuelke

+0

dzuelke,如果你在本地运行该代码,你是否可以尝试连接到该数据库? (用正确的DATABASE_URL var关闭课程) – JeroenJ