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

时间:2018-03-22 14:33:46

标签: php postgresql heroku connection remote-access

我有一个PHP应用程序需要远程连接到HEROKU应用程序的postgresql数据库并运行数据库查询(最好使用pg_query,尽管PDO也可以)。我很难尝试1.)使用Heroku DATABASE_URL(他们推荐)获取实时数据库凭据,以及2)即使提供了硬编码凭证,也会生成任何类型的数据库连接。我还没有找到正确的连接步骤。 (应用程序在GoDaddy托管上运行 - 为清晰起见而提到。)

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

到目前为止我所做的事情(编辑过的评论来自原帖):

//$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;
}

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

2 个答案:

答案 0 :(得分:1)

您需要使用正确的连接字符串调用pg_connect。我不认为它与通过Heroku提供的URL相同; hasOwnProperty

您还未正确使用getenv

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

答案 1 :(得分:1)

我发现至少有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 PDOPHP 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);
}
?>