Учитывая, что наиболее рекомендуемый режим ошибок для 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!"; // whatever
В случае успеха сообщит вам об этом, при ошибке отобразит обычную страницу с ошибкой, которую ваше приложение показывает по такому случаю.
Только в случае, если у вас есть сценарий обработки , отличный от простого сообщения об ошибке, поместите оператор вставки в оператор try..catch
, проверьте, ожидала ли это ошибка, и обработайте ее; или - если ошибка была иной - re-throw исключение, чтобы сделать возможным обработку общесайтовым обработчиком ошибок обычным способом. Ниже приведен пример кода из моей статьи об обработке ошибок с помощью PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
В приведенном выше коде мы проверяем конкретную ошибку, чтобы предпринять какое-то действие, и повторно генерируем исключение для любой другой ошибки (например, такой таблицы нет), которая будет сообщена программисту.
Еще раз - просто сказать пользователю что-то вроде «Ваша вставка прошла успешно» никаких условий не требуется.