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