Вопросы об исключениях из 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; индекс уникален и выдает ошибку, как и ожидалось, просто не используя этот код.

Ответы на вопрос(2)

Ваш ответ на вопрос