Ответ выше правильный, но все всегда его понимают неверно.
Под перехватить имеется в виду не "тут же сразу на месте", а "там, где это удобно".
Удобно перехватывать ошибки либо в глобальном try-catch, либо в специализированном Exception handler-e.
Полностью готовое решение:
set_exception_handler(function ($e)
{
error_log($e);
http_response_code(500);
if (ini_get('display_errors')) {
echo $e;
} else {
echo "<h1>500 Internal Server Error</h1>
An internal server error has been occurred.<br>
Please try again later.";
}
});
Взято из
PHP error reporting
Плюсы:
- работает для любых исключений, а не только для соединения PDO
- корректно работает в любых окружениях - как боевом, так и тестовом
- если надо поменять обработчик (например вывести другой текст/оформление) - это делается в одном месте.
Для того, чтобы стек трейс вообще нигде не светился, даже в логах, можно при коннекте выбросить совсем новое исключение. Как это сделать, можно посмотреть
здесь