Pytania dotyczące wyjątków PDO - jak je złapać

Korzystam z PDO, aby ponownie napisać interfejs strony internetowej dla bazy danych. Kiedyś korzystałem z rozszerzenia mysql, ale nigdy nie przejmowałem się obsługą błędów, a kilka procedur obsługi błędów, które miałem, było w zasadzie kopiowaniem i wklejaniem.

Teraz chciałbym to zrobić dobrze. Mam jednak problemy z wychwytywaniem błędów, które chciałbym (błędy takie jak „Duplicate Entry”, „Null Value” itp. W MySQL). Ile mojej wypowiedzi musi znajdować się w bloku prób? Czy to wszystko powinno tam być? UżywamInclude() aby połączyć się z moim DB (który ma własną obsługę błędów), więc tylko wykonanie kwerendy zawiera błędy w tym kodzie. Nie mogę zrozumieć, dlaczego nie dochodzi do błędu podczas wykonywania następującego kodu:

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();
}

Więc moje pytania: czy WSZYSTKO TO musi być w bloku prób? Czy mogę umieścić wykonanie w bloku try? Powinien złapać błądDuplicate value "John" in key "name", ale zamiast tego przechodzi wiadomość o sukcesie. (Podczas próby dodania dwóch użytkowników „John”). Sprawdziłem w PHPMyAdmin; indeks jest unikalny i powoduje błąd zgodnie z oczekiwaniami, po prostu nie używa tego kodu.

questionAnswers(2)

yourAnswerToTheQuestion