Я обновляю некоторый устаревший код 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 — и как я могу это исправить?
Хорошо, оказывается, что я идиот … код не доставлялся на сервер должным образом, поэтому я тестировал старый код, который выглядел так:
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, так что с миром все в порядке.
Других решений пока нет …