如何使用远程连接到 HEROKU PostgreSQL 数据库

How to remotely connect to HEROKU PostgreSQL database using

我有一个 PHP 应用程序需要远程连接到 HEROKU 应用程序的 postgresql 数据库和 运行 数据库查询(最好使用 pg_query,尽管 PDO 是也可以)。我一直在尝试 1.) 使用 Heroku DATABASE_URL 获取实时数据库凭据(正如他们所推荐的那样),以及 2) 即使提供了硬编码凭据也能生成任何类型的数据库连接。我还没有找到建立连接的正确步骤顺序。 (应用 运行 在 GoDaddy 主机上运行 - 为清楚起见提及。)

我正在尝试连接到数据库,运行 一个 select 查询并将结果集中的值分配给 PHP 变量。我可以使用 PGAdmin3 连接到数据库,因此远程访问不是问题。

到目前为止我所拥有的(编辑-注释行来自原始post):

//$DATABASE_URL='$({heroku CLI string, pasted from Heroku db credentials page})';
//$db = parse_url(getenv($DATABASE_URL));

$db_url = getenv("DATABASE_URL") ?: "postgres://user:pass@host:port/dbname";
$db = pg_connect($db_url);

if($db) {echo "connected";} else {echo "not connected";}

$selectSql = "SELECT id, name FROM companies ORDER BY id";   
$result =  pg_query($db, $selectSql);

while ($row = pg_fetch_row($result)) {
    $id = $row["id"];
    $name = $row["name"];
    echo "<br>id: ".$id;
    echo "<br>name: ".$name;
}

连接数据库和 运行 查询缺少什么?

您需要使用正确的连接字符串调用 pg_connect。我不认为它与通过 Heroku 给出的 URL 相同; refer to the documentation for that one.

您还 getenv 使用不当。

$db_url = getenv("DATABASE_URL") ?: "some default value here";
$db = pg_connect($db_url);

我看到至少 3 个问题:

1) 删除或注释掉:

$DATABASE_URL='$({heroku CLI string, pasted from Heroku db credentials page})';

2) 更改此行以获取环境变量(因此看起来像这样)。启动前必须设置环境变量PHP。您也可以硬编码该值,但不推荐:

$db = parse_url(getenv('DATABASE_URL'));

3) 看起来您实际上并没有连接到数据库,您只是开始查询。你必须先连接。参见 heroku docs for PDO or PHP docs for pg_query

更新2018-03-23

这是一个独立程序,可以确保它正在连接:

#!/usr/bin/env php
<?php
$db_url = getenv("DATABASE_URL") ?: "postgres://user:pass@host:port/dbname";
echo "$db_url\n";

$db = pg_connect($db_url);
if($db) {echo "connected";} else {echo "not connected";}

$selectSql = "SELECT 1";
$result =  pg_query($db, $selectSql);

while ($row = pg_fetch_row($result)) {
    var_dump($row);
}
?>