0

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

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 - 我该如何解决?

4

1 回答 1

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,所以一切正常。

于 2017-02-09T17:20:53.530 回答