Изключения

Базата данни Nette използва йерархия от изключения. Базовият клас е 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();
}
версия: 4.0