Учитывая, что наиболее рекомендуемый режим ошибок для PDO - это ERRMODE_EXCEPTION
, никакая прямая execute()
проверка результатов никогда не будет работать . Поскольку выполнение кода даже не достигнет условия, предложенного в других ответах.
Итак, есть три возможных сценария обработки результата выполнения запроса в PDO:
- Чтобы сказать об успехе, проверка не требуется. Просто следите за ходом своей программы.
- Чтобы справиться с неожиданной ошибкой, придерживайтесь того же принципа - код немедленной обработки не требуется. В случае ошибки базы данных будет сгенерировано исключение, и оно будет передано обработчику ошибок всего сайта, что в конечном итоге приведет к появлению стандартной страницы с ошибкой 500.
- Чтобы обработать ожидаемую ошибку, например дублированный первичный ключ, и если у вас есть определенный сценарий для обработки этой конкретной ошибки, используйте
try..catch
оператор.
Для обычного пользователя PHP это звучит немного чуждо - как же, чтобы не проверить прямой результат операции? - но именно так работают исключения - вы проверяете ошибку в другом месте. Раз и навсегда. Чрезвычайно удобно.
Итак, в двух словах: в обычном коде обработка ошибок не требуется. Просто сохраните свой код как есть:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!";
В случае успеха он сообщит вам об этом, в случае ошибки он покажет вам обычную страницу с ошибкой, которую ваше приложение показывает для такого случая.
Только в случае, если у вас есть сценарий обработки, отличный от простого сообщения об ошибке, поместите оператор вставки в try..catch
оператор, проверьте, была ли это ожидаемая вами ошибка, и обработайте ее; или - если ошибка была другой - повторно вызовите исключение, чтобы обработчик ошибок всего сайта мог обработать его обычным способом. Ниже приведен пример кода из моей статьи об обработке ошибок с помощью PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
} else {
throw $e;
}
}
echo "Success!";
В приведенном выше коде мы проверяем конкретную ошибку, чтобы предпринять какие-либо действия, и повторно генерируем исключение для любой другой ошибки (например, такой таблицы нет), о которой будет сообщено программисту.
И опять же - просто сказать пользователю что-то вроде «Ваша вставка прошла успешно» никаких условий не требуется.