pg_query错误直接进入控制台,而pg_last_error则不返回任何内容

时间:2017-02-08 16:38:20

标签: php postgresql error-handling pg-query

我正在更新一些遗留的PHP代码并尝试获得一些不错的错误记录。所有对DB的调用现在都通过这个函数:

private function dbQuery($sql) {
        if (DEBUG) print("\n" . $sql . "\n");
        $result = pg_query($this->dbh, $sql);
        if ($result == FALSE) print("DB Error: " . pg_last_error($this->dbh) . "\n");
        return $result;
    }

但是,至少在一种情况下,错误出现在控制台中(作为PHP警告),而pg_last_error什么都不返回(即使pg_query调用的结果为FALSE)。实际输出:

insert into pull_count (show_pull_item_id, count_pulled, created, modified) values (1076028, 1, NOW(), NOW())
PHP Warning:  pg_query(): Query failed: ERROR:  permission denied for relation pull_count in /var/www/html/src/backend/engine.php on line 1740
DB Error:

在调用函数中,我们再次调用pg_last_error(),我们仍然没有得到任何结果。

那么......这笔交易是什么?为什么错误会进入控制台,而不是pg_last_error - 我该如何解决?

1 个答案:

答案 0 :(得分:0)

好吧,事实证明我是个白痴......代码没有被正确地推送到服务器,所以我正在测试看起来像这样的旧代码:

private function dbQuery($sql) {
    if (DEBUG) print("\n" . $sql . "\n");
    $result = pg_query($this->dbh, $sql);
    if ($result == FALSE) print("DB Error: " . pg_last_error() . "\n");
    return $result;
}

请注意,在pg_last_error调用中未包含数据库连接句柄。这就是为什么它没有返回任何结果。

经过更正后,我仍然在控制台中收到了PHP警告,但我得到了一个正确的pg_last_error,所以一切都适合全世界。