2017-02-08 17 views
0

Я обновляю некоторые устаревшие PHP-коды и пытаюсь получить приличную регистрацию ошибок. Все вызовы к БД Теперь пройти через эту функцию:Ошибка pg_query, идущая прямо на консоль, в то время как 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($this->dbh) . "\n"); 
     return $result; 
    } 

Но, по крайней мере в одном случае, ошибка появляется в консоли все само по себе (как PHP Warning), в то время как 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

Дальнейшее исследование показывает, что оно не имеет ничего общего с ошибкой разрешений ... если моя строка запроса содержит какую-либо ошибку вообще, я получаю тот же результат: предупреждение PHP в консоли и вообще ничего от pg_last_error() , Есть ли настройки конфигурации где-то, что влияет на это поведение? –

ответ

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; 
} 

Обратите внимание на отказ для включения дескриптора соединения DB в вызове pg_last_error. Вот почему он не смог вернуть никакого результата.

С исправленными, я все еще получаю предупреждение PHP на консоли, но у меня есть также, чтобы получить правильный pg_last_error, так что все правильно с миром.