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 выполняется правильно каждый раз.
Ответы
Ответ 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]);
}