Вопросы-исключения PDO – как их поймать

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

18
задан StuckAtWork 19 June 2012 в 14:01
поделиться