我正在更新一些遗留的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 - 我该如何解决?
答案 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,所以一切都适合全世界。