Catch db2_prepare сгенерированное предупреждение - PullRequest
0 голосов
/ 26 января 2012

Мой класс DB2 имеет функцию подготовки:

public function prepare()
{
    if (FALSE === ($this->stmt = db2_prepare($this->conn, $this->sql)))
    {
        throw new Exception($this->get_error());
    }

    return $this;
}

Какой-то загадочный запрос вызывает предупреждение в журнале ошибок php:

[26-Jan-2012 11:17:32] PHP Warning:  db2_prepare(): Statement Prepare Failed in /<path to file>/Db2.php on line 178

db2_prepare не возвращает FALSE. В противном случае было бы выдано исключение, и я бы получил обратную трассировку.

Не правильно ли я проверяю возвращаемое значение db2_prepare для обнаружения допустимых ошибок / предупреждений, или db2_prepare содержит ошибку? Это работает в стеке Zend Server на i5 / iseries / as400.

Обходной путь в этой ситуации - блок try catch, который генерирует исключения для предупреждений. Не уверен, как это будет работать, и это звучит как еще один пост для меня.

Кроме того, @ здесь не вариант. Это генерирует предупреждение по причине. Я предпочитаю не засовывать голову в песок.

Обновление : Я наконец разыскал запрос. Это был плохо сформированный оператор вставки. Несмотря на то, что подготовка не удалась и возникла ошибка, был возвращен действительный ресурс оператора, и сценарий продолжил генерировать исключение. Я использовал exec для вызова скрипта, содержащего неверный INSERT, но я не возвращал вывод скрипта, поэтому я никогда не видел ошибку.

Это все еще кажется мне глючным, но у меня нет времени заниматься этим дальше.

1 Ответ

1 голос
/ 27 января 2012

При проверке возврата вы, вероятно, захотите сравнить SQLSTATE вместо того, вернул ли препарат успешный ресурс.

Вы можете получить SQLSTATE в PHP, используя db2_stmt_error(), что даст вам состояние SQL последнего выполнения (если вы передаете определенный ресурс, последнее выполнение этого ресурса). Я считаю, что единственное значение SQLSTATE, которое вы хотите вернуть из PREPARE, будет 00000, что является кодом для успешного выполнения.

Если вы хотите вывести читаемое человеком сообщение об ошибке SQL, вы можете использовать db2_stmt_errormsg(), который выведет SQLSTATE и соответствующую строку сообщения об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...