Try-catch PDO и атрибут исключения - PullRequest
0 голосов
/ 29 декабря 2011

Я использую PDO для подключения к базе данных mysql. Я запутался, где я должен использовать блоки try try, если я установил атрибут error следующим образом: $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Прямо сейчас у меня есть информация о соединении (имя пользователя, пароль и т. Д.) И строка выше в отдельном файле, который я включу в свои основные файлы. Они (информация о соединении и строка выше) хранятся в блоке try-catch.

В мои основные файлы я включаю этот файл. Нужны ли мне блоки try-catch в моих основных файлах (вокруг pdo-файлов)? (Они там, где я создаю и выполняю запросы).

1 Ответ

1 голос
/ 29 декабря 2011

Как и во всех исключениях, вам придется обращаться с ними каждый раз, когда они не обрабатываются, и в месте, где есть смысл обрабатывать их. Для каждого метода, который может бросить, спросите себя, где он мог бы быть обработан должным образом? Возможно, не имеет смысла перехватывать исключения прямо при вызове функций PDO, которые могут их генерировать, но на более высоком уровне. (Например, не имеет смысла обрабатывать PDOException в момент создания нового объекта PDO, поскольку следующий код будет зависеть от наличия действительного объекта PDO; вместо этого он должен обрабатываться в точке, которая может попытка восстановления после исключения или изящная ошибка.) Это является причиной исключений: ошибки могут быть обнаружены на более низком уровне, где может быть недостаточно информации для устранения ошибки. Таким образом, код создает исключение в более высоком месте, которое может устранить ошибку.

В хорошо спроектированном проекте доступ к хранилищу данных отделен от модуля, поэтому большая часть остального кода не зависит от точного характера хранилища данных. В архитектурах с таким разделением (таких как многоуровневая или MVC) исключения хранилища данных будут обрабатываться на уровне доступа к данным, хотя «обработка» может означать создание исключения другого типа.

Помогает подумать о стратегиях обработки исключений :

  • Повторите попытку, исправив что-то и повторив неудачную операцию
  • повторите попытку, перезапустив операцию
  • продолжить процесс и повторить операцию позднее (не просто продолжать и игнорировать исключение)
  • выбросить исключение (которое может быть тем же самым исключением) на более высокий уровень
  • повторите попытку, отобразив пользователю сообщение об ошибке, что даст ему возможность что-то исправить, и (если так) повторите попытку неудачной операции.
  • выводит сообщение об ошибке пользователю и завершается (только не используйте or die при выводе HTML; недопустимый HTML не изящен).

См. Также: " Антипаттерны для обработки исключений ".

Если вы спрашиваете, будет ли установка режима ошибки на PDO::ERRMODE_EXCEPTION вызывать исключения, то нет; наоборот, на самом деле. Только блоки catch могут обрабатывать исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...