Исключения
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();
}