我有一个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;
}
连接数据库并运行查询缺少什么?
答案 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 PDO或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);
}
?>