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