Подтвердить что ты не робот

PHP PDO. номер ошибки '00000', когда запрос верен

У меня есть код ниже:

$sql3 = "update news set date='$time' where id='2'";
$sql3 = $connect->exec($sql3);
if(!$sql3)
{
    print_r($connect->errorInfo());
    $error = $connect->errorInfo();
    die ("Error: (".$error[0].':'.$error[1].') '.$error[2]);
}

Когда я запускаю script, иногда я получаю номер ошибки "00000". Я имею в виду, что он вводит IF. и все это случайным образом. вывод (иногда):

Array ( [0] => 00000 [1] => [2] => )

Что мне делать, чтобы исправить эту проблему?
PS: script выполняется правильно каждый раз.

4b9b3361

Ответ 1

Код ошибки PDO 00000 означает, что все работает нормально. Причина, по которой вы попадаете в код проверки ошибок, заключается в том, что $sql3 возвращает 0 (строки не выполнялись), а PHP оценивает это значение на false. Попробуйте явно проверить для return false;

if($sql3 === false)

Ответ 2

Если exec не обновляет ни одну строку, он вернет 0., что делает if (! $sql3) равным false, вы должны сделать это вместо:

if($sql3 === false){

}

Ответ 3

00000 означает, что он работает нормально. вы должны изменить свое, если: $sql3 === false.

Ответ 4

У меня была похожая ситуация в моем проекте php - произошло, что PDO Exception с кодом ошибки "00000" произошло, когда я попытался вставить строку с полем, установленным в NULL, тогда как столбец, определяющий поле в базе данных, имел тип ENUM('0', '1') и ограничение NOT NULL. После того, как PHP script изменил значение <0 > вместо NULL, ошибка исчезла.


Дальнейшее кодирование привело к большей освещенности в ситуации - я выполнял несколько статусов PDO в одной транзакции БД, но проверял ошибки (в блоке обработки исключений), основываясь только на первом заявлении PDO, выполняемом, когда была выполнена реальная ошибка в третьем заявлении PDO.

Ответ 5

По моему опыту плохо сформированные запросы (синтаксические ошибки) и неудавшиеся запросы (например, INSERT, которые ничего не вставляли) также могут НЕПРАВИЛЬНО возвращать код ошибки 00000. Вы должны продолжить и попытаться запустить полный запрос на вашем SQL консоль и посмотреть, почему она не удалась. Я действительно не знаю, почему правильное сообщение об ошибке не возвращается. Здесь фрагмент кода, который мы используем

    $r = $pdo->prepare($sql);
    if (!$r->execute($input_parameters)) { # query failed
        if ($bLogFailures) {
            error_log('query failed: ERROR['.$pdo->errorCode().':'.print_r($pdo->errorInfo(), true).'] QUERY['.$sql.']');
        }
        return false;
    }

Ответ 6

У меня была та же проблема. Это также сильно мучило меня, но, в конце концов, выяснилось.

Предположим, что в вашей таблице есть 7 столбцов.

Вы вставляете данные в 4 из них.

Если для остальных 3 столбца значение по умолчанию не установлено (скажем NULL for alpha-numeric columns, CURRENT_TIMESTAMP for date-time related columns etc.), то возникает вышеуказанная проблема.

Если вы вставляете данные в все из этих 7 столбцов или по крайней мере в тех столбцах, для которых значение по умолчанию не установлено, вы не получите никаких ошибок, и данные будут вставьте.

Ответ 7

Оператор PDO:: exec возвращает целое число, указывающее количество затронутых строк. Поэтому в вашем конкретном случае, как указывает SomeKittens, если были затронуты 0 строк, тогда будет выведен код ошибки.

Однако, если вы обеспокоены тем, работал ли ваш запрос, вашим лучшим действием может быть использование PDO:: query (с точки зрения вашего кода ($ returnObj = $connect- > query ($ sql3) вместо PDO::. Exec

Затем можно возвратить $returnObj, чтобы проверить, была ли ошибка в выполнении SQL, и затем вы можете устранить ваш SQL-запрос, потому что он скажет вам, что такое ошибка и где она была расположена.

Лучше всего сделать это:

//set PDO to throw an error so you can wrap the query in a try / catch block. 
$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql3 = "update news set date='$time' where id='2'";
try {
     $returnObj = $connect->query($sql3);
} catch (PDOException $e) {
    print_r($returnOjb->errorInfo());
    $error = $returnObj->errorInfo();
    die ("Error: (".$error[0].':'.$error[1].') '.$error[2]);
}