Винятки

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 'A user with this email already exists.';

} catch (Nette\Database\DriverException $e) {
	echo 'An error occurred during registration: ' . $e->getMessage();
}
версію: 4.0