try {
$conn = new PDO($dsn);
$result = $conn->query($sql);
} catch (PDOException $e) {
// Обработка ошибки БД
log($e->getMessage());
throw new DatabaseException('Query failed', 0, $e); // re-throw
} catch (Exception $e) {
// Любое другое исключение
log($e->getMessage());
} finally {
// Выполняется ВСЕГДА (даже после return или throw)
$conn = null; // закрываем соединение
}Блоки catch проверяются по порядку - ставьте более конкретные исключения первыми. finally используется для очистки ресурсов.