Исключения

Nette Database использует иерархию исключений. Базовым классом является Nette\Database\DriverException, который наследует от PDOException и предоставляет расширенные возможности для работы с ошибками базы данных:

  • Метод getDriverCode() возвращает код ошибки от драйвера базы данных
  • Метод getSqlState() возвращает код SQLSTATE
  • Методы getQueryString() и getParameters() позволяют получить исходный запрос и его параметры

От DriverException наследуют следующие специализированные исключения:

  • ConnectionException – сигнализирует о сбое подключения к серверу базы данных
  • ConstraintViolationException – базовый класс для нарушений ограничений базы данных, от которого наследуют:
    • ForeignKeyConstraintViolationException – нарушение внешнего ключа
    • NotNullConstraintViolationException – нарушение ограничения NOT NULL
    • UniqueConstraintViolationException – нарушение уникальности значения

Пример перехвата исключения 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();
}
версия: 4.0