Как и во всех исключениях, вам придется обращаться с ними каждый раз, когда они не обрабатываются, и в месте, где есть смысл обрабатывать их. Для каждого метода, который может бросить, спросите себя, где он мог бы быть обработан должным образом? Возможно, не имеет смысла перехватывать исключения прямо при вызове функций PDO, которые могут их генерировать, но на более высоком уровне. (Например, не имеет смысла обрабатывать PDOException в момент создания нового объекта PDO, поскольку следующий код будет зависеть от наличия действительного объекта PDO; вместо этого он должен обрабатываться в точке, которая может попытка восстановления после исключения или изящная ошибка.) Это является причиной исключений: ошибки могут быть обнаружены на более низком уровне, где может быть недостаточно информации для устранения ошибки. Таким образом, код создает исключение в более высоком месте, которое может устранить ошибку.
В хорошо спроектированном проекте доступ к хранилищу данных отделен от модуля, поэтому большая часть остального кода не зависит от точного характера хранилища данных. В архитектурах с таким разделением (таких как многоуровневая или MVC) исключения хранилища данных будут обрабатываться на уровне доступа к данным, хотя «обработка» может означать создание исключения другого типа.
Помогает подумать о стратегиях обработки исключений :
- Повторите попытку, исправив что-то и повторив неудачную операцию
- повторите попытку, перезапустив операцию
- продолжить процесс и повторить операцию позднее (не просто продолжать и игнорировать исключение)
- выбросить исключение (которое может быть тем же самым исключением) на более высокий уровень
- повторите попытку, отобразив пользователю сообщение об ошибке, что даст ему возможность что-то исправить, и (если так) повторите попытку неудачной операции.
- выводит сообщение об ошибке пользователю и завершается (только не используйте
or die
при выводе HTML; недопустимый HTML не изящен).
См. Также: " Антипаттерны для обработки исключений ".
Если вы спрашиваете, будет ли установка режима ошибки на PDO::ERRMODE_EXCEPTION
вызывать исключения, то нет; наоборот, на самом деле. Только блоки catch могут обрабатывать исключения.