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

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

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

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

Solutions Collecting From Web of "PHP PDO. номер ошибки «00000», когда запрос правильный"

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

 if($sql3 === false) 

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

 if($sql3 === false){ } 

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

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


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

По моему опыту плохо сформированные запросы (синтаксические ошибки) и неудавшиеся запросы (например, 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; } 

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

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

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

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

Если вы вставляете данные во все эти 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]); }