Исключения
Nette Database использует иерархию исключений. Базовым классом является
Nette\Database\DriverException, который наследует от PDOException и
предоставляет расширенные возможности для работы с ошибками базы
данных:
- Метод
getDriverCode()возвращает код ошибки от драйвера базы данных - Метод
getSqlState()возвращает код SQLSTATE - Методы
getQueryString()иgetParameters()позволяют получить исходный запрос и его параметры
От DriverException наследуют следующие специализированные
исключения:
ConnectionException– сигнализирует о сбое подключения к серверу базы данныхConstraintViolationException– базовый класс для нарушений ограничений базы данных, от которого наследуют:ForeignKeyConstraintViolationException– нарушение внешнего ключаNotNullConstraintViolationException– нарушение ограничения NOT NULLUniqueConstraintViolationException– нарушение уникальности значения
Пример перехвата исключения UniqueConstraintViolationException, которое
возникает, когда мы пытаемся вставить пользователя с email, который уже
существует в базе данных (при условии, что столбец email имеет уникальный
индекс).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Пользователь с этим email уже существует.';
} catch (Nette\Database\DriverException $e) {
echo 'Произошла ошибка при регистрации: ' . $e->getMessage();
}