使用PHP连接到Heroku Postgres数据库

时间:2015-03-18 01:15:08

标签: php postgresql heroku

我有一个使用Heroku的应用程序,我正在尝试用PHP连接,但我没有运气。我能够在pgAdmin III中连接到数据库,所以我知道我有正确的信息,但PHP没有返回对我有用的任何内容,只是假的。任何人都可以建议我可能做错了什么,甚至是一种让PHP告诉我更实质性的方法,这样我可以更好地解决问题?

这是我的连接字符串:

$conn = pg_connect("host=ec2-xx-xx-xxx-xx.compute-1.amazonaws.com port=xxxx dbname=namestring user=username password=pass sslmode=require");

我已经尝试过sslmode而没有,我已经尝试更改字符串中参数的顺序,当我执行var_dump($ conn)时,我只是得到了错误。

1 个答案:

答案 0 :(得分:0)

我假设您在本地运行此操作,因此请检查您的本地display_errors是否启用了php.ini,并且error_reporting设置为合理的。这就是你没有得到错误输出的原因。

然后您应该看到连接由于某种原因(可能是您的网络)被拒绝,或者例如您的本地PHP没有启用OpenSSL(全局或Postgres)。

如果在Heroku上发生这种情况,那么你永远不会在页面中看到错误,因为它是一个生产环境,display_errors永远不应该出现;运行heroku logs以查看PHP的用途。在这种情况下,唯一的原因是您的凭据不正确,因此请检查错别字。

这给我带来了一些重要建议:不要在代码中对这些凭据(或任何其他配置)进行硬编码。 Heroku为您提供了一个带有连接字符串的DATABASE_URL env var;使用parse_url(getenv('DATABASE_URL'))为您提供的动态读取。原因是,如果Heroku需要对数据库进行自动故障转移,您的凭据可能会更改,如果您对这些凭据进行硬编码,则在这种情况下您的应用程序会崩溃。

如果这是在Heroku上,你真的应该在本地运行这个东西,这意味着使用本地Postgres数据库,而不是远程连接到生产数据库,或者甚至盲目地将代码推送到Heroku而不是尝试它在当地。随着时间的推移,更容易,更快。