Я использую PDO, чтобы переписать интерфейс веб-сайта для базы данных. Раньше я использовал расширение mysql, но никогда не беспокоился об обработке ошибок, а те немногие обработчики ошибок, которые у меня были, были в основном копипаст.
Теперь я хотел бы сделать это правильно. Однако у меня возникают проблемы с обнаружением ошибок так, как я хотел бы (такие ошибки, как «Дублирующаяся запись», «Нулевое значение» и т. Д. В 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? Могу ли я просто поместить выполнение в блок try? Он должен поймать ошибку Duplicate value "John" в ключе "name"
, но вместо этого выдаст сообщение об успешном выполнении. (При попытке добавить двух пользователей «Джон»). Я проверил в PHPMyAdmin; индекс уникален и выдает ошибку, как и ожидалось, просто не используя этот код.