Perguntas da exceção de DOP - como travá-las

Estou usando o PDO para reescrever uma interface de website para um banco de dados. Eu costumava usar a extensão mysql, mas nunca tinha me incomodado com o tratamento de erros, e os poucos manipuladores de erros que eu tinha eram basicamente copiar e colar.

Agora eu gostaria de fazer isso direito. No entanto, estou tendo problemas para pegar os erros que gostaria de ter (erros como "Duplicate Entry", "Null Value" etc no MySQL). Quanto da minha declaração precisa estar no bloco try? Tudo deveria estar lá? Estou usando umInclude() para se conectar ao meu banco de dados (que tem seu próprio tratamento de erros), portanto, é apenas a execução da consulta que possui erros nesse código. Eu não consigo descobrir por que não está pegando um erro ao executar o seguinte código:

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

Então, minhas perguntas: TUDO ISSO precisa estar no bloco try? Posso apenas colocar a execução no bloco try? Deve pegar o erroDuplicate value "John" in key "name", mas, em vez disso, passa com a mensagem de sucesso. (Ao tentar adicionar dois usuários "John"). Eu chequei no PHPMyAdmin; o índice é único e lança o erro como esperado, simplesmente não usando este código.

questionAnswers(2)

yourAnswerToTheQuestion