【问题标题】:PHP trouble connecting to Postgres on HerokuPHP 在 Heroku 上连接 Postgres 时遇到问题
【发布时间】:2020-04-07 11:42:30
【问题描述】:

当部署到 heroku 时,似乎有些东西不起作用,因为我的端点没有将我通过 Heroku CLI 连接输入的数据返回到 postgres。在本地,我正在尝试使用以下命令进行故障排除进行连接。这是一个指向 github 的链接,它反映了我如何为 heroku (https://github.com/AlexMercedCoder/SavvyBackendAPI/blob/master/api/models/comments.php) 设置它,下面的 url 在我的本地环境中使用字符串中的实际主机名。

$dbconn = pg_connect("host=<hostnamefromheroku>
 port=5432 dbname=d3qvmqtmq9s8b user=cticedgggntdqf password=5d17168b471db3b178e8ede79d5f92605d765375ea153444cd403c0a544f2146 sslmode=require");

当我在浏览器中从本地主机运行它时,我收到以下错误:

<br />
<b>Warning</b>:  pg_connect(): Unable to connect to PostgreSQL server: could not translate host name &quot;dbname=d3qvmqtmq9s8b&quot; to address: Name or service not known in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>11</b><br />
<br />
<b>Warning</b>:  pg_query(): No PostgreSQL link opened yet in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>41</b><br />
<br />
<b>Notice</b>:  Undefined variable: result in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>43</b><br />
NULL
<br />
<b>Warning</b>:  pg_fetch_object() expects parameter 1 to be resource, bool given in <b>/home/alexmerced/gasei/PHP/savvy/api/models/comments.php</b> on line <b>45</b><br />
[]

所以测试命令我在本地的 PHP Cli 中运行了相同的命令,并且能够成功地从数据库中提取数据。 (使用相同的 pg_query pg_fetch_object 命令)

因此,我们将非常感谢任何有关如何翻越这堵墙的建议。我已经阅读了很多关于这个问题的博客和问题,但大多数解决方案似乎都无法解决问题。

这是已部署版本的链接:https://savvyhotspotsapi.herokuapp.com/api/comments

如果你去 root 或 /api 表明它工作正常,我放在那里的 hello world index.php 工作正常。

2019 年 12 月 14 日更新

  • 在本地我得到了应用程序来提供 API,但是当我部署到 heroku 时仍然显示一个空数组,即使完全相同的代码能够在我的本地 php env 上成功检索数据。

我当前的连接代码,在本地工作:

$DBURL = "host=$h dbname=$n user=$u port=5432 password=$p sslmode=require";

$dbconn = pg_connect($DBURL);

我已经尝试过使用或不使用 sslmode,我已经使用字符串中的直接详细信息进行了尝试,似乎没有任何改变空数组。

【问题讨论】:

  • 那是哪个版本的 PHP?它似乎使用的是旧格式的 pg_connect,它将主机、端口等作为单独的参数(至少错误消息似乎表明了这一点)
  • 在我的命令行上它是如此 PHP 7.3,我正在运行 XAMPP 7.3.11 以在我的本地环境上运行服务器。
  • 原来我的编辑是错误的文件,所以它仍然试图在本地从 heroku 获取配置变量,所以修复它并且它在本地工作,但是当我部署到 heroku 时我没有做任何事情.我什至尝试直接使用凭证,但它仍然只返回一个空数组,但在本地完成时为我提供正确的数据,即使它连接到 Heroku 数据库。

标签: php postgresql heroku


【解决方案1】:

总结

在创建 Heroku Postgres 数据库时,会在环境变量 DATABASE_URL 下生成一个 DB uri

诀窍是我使用它而不是尝试手动传递各个部分。

$dbconn = pg_connect(getenv("DATABASE_URL"));

不是

$DBURL = "host=$h dbname=$n user=$u port=5432 password=$p sslmode=require";

$dbconn = pg_connect($DBURL);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多