Изключения

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 'Потребител с този имейл вече съществува.';

} catch (Nette\Database\DriverException $e) {
	echo 'Възникна грешка при регистрацията: ' . $e->getMessage();
}
версия: 4.0