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

标签 php postgresql heroku connection remote-access

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

我正在尝试连接到数据库,运行选择查询并将结果集中的值分配给 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;
}

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

最佳答案

我看到至少 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);
}
?>

关于php - 如何使用远程连接到 HEROKU PostgreSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431345/

相关文章:

php - AJAX 图像 slider

postgresql - 使用KML生成几何图形

ruby-on-rails - Rails exec_query 绑定(bind)被忽略

php - 什么时候使用静态函数,什么时候不使用静态函数?

php - 获取父工单的用户 ID - MySQL

php - 使用 foreach from 变量将多行插入数据库

postgresql - Azure 数据工厂 AWS PostgreSQL RDS 作为源连接

go - 如何在发布时在 heroku 上运行 Go 迁移?

node.js - Heroku NodeJS 帮助 – 推送被拒绝,未检测到 Cedar 支持的应用程序

ruby-on-rails - 数据库导入后将迁移标记为已迁移