Вопросы об исключениях из PDO - как их поймать
Я использую PDO, чтобы переписать интерфейс веб-сайта для базы данных. Раньше я использовал расширение mysql, но никогда не беспокоился об обработке ошибок, а те немногие обработчики ошибок, которые у меня были, были в основном копируемыми.
Теперь я хочу сделать это правильно. Однако у меня возникают проблемы с обнаружением ошибок, которые мне нравятся (такие ошибки, как «Duplicate Entry», «Null Value» и т. Д. В MySQL). Какая часть моего утверждения должна быть в блоке try? Должно ли все это быть там? Я используюInclude()
подключиться к моей БД (которая имеет свою собственную обработку ошибок), так что это только выполнение запроса, в котором есть ошибки в этом коде. Я не могу понять, почему он не улавливает ошибку при выполнении следующего кода:
try {
$stmt = $db->prepare("INSERT INTO tbl_user (id, name, password, question, answer) VALUES (NULL, :name, :password, :question, :answer)");
$stmt->bindValue(":name", $_POST['name']);
$stmt->bindValue(":password", $_POST['password']);
$stmt->bindValue(":question", $_POST['question']);
$stmt->bindValue(":answer", $_POST['answer']);
$stmt->execute();
echo "Successfully added the new user " . $_POST['name'];
} catch (PDOException $e) {
echo "The user could not be added.<br>".$e->getMessage();
}
Итак, мои вопросы: ВСЕ ЭТО должно быть в блоке try? Могу ли я просто поместить execute в блок try? Должно поймать ошибкуDuplicate value "John" in key "name"
, но вместо этого проходит через сообщение об успехе. (При попытке добавить двух пользователей "Джон"). Я проверил в PHPMyAdmin; индекс уникален и выдает ошибку, как и ожидалось, просто не используя этот код.