如何使用远程连接到 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);
}
?>
我有一个 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);
}
?>