Wyjątki

Nette Database wykorzystuje hierarchię wyjątków. Klasą bazową jest Nette\Database\DriverException, która rozszerza PDOException i zapewnia rozszerzoną funkcjonalność do pracy z błędami bazy danych:

  • Metoda getDriverCode() zwraca kod błędu ze sterownika bazy danych.
  • Metoda getSqlState() zwraca kod SQLSTATE.
  • Możesz użyć metod getQueryString() i getParameters(), aby pobrać oryginalne zapytanie i jego parametry.

Klasa DriverException jest rozszerzona o następujące wyspecjalizowane wyjątki:

  • ConnectionException – wskazuje na niepowodzenie połączenia z serwerem bazy danych.
  • ConstraintViolationException – klasa bazowa dla naruszeń ograniczeń bazy danych, z której dziedziczą następujące wyjątki:
    • ForeignKeyConstraintViolationException – naruszenie ograniczenia klucza obcego.
    • NotNullConstraintViolationException – naruszenie ograniczenia NOT NULL.
    • UniqueConstraintViolationException – naruszenie ograniczenia unikalności.

Poniższy przykład pokazuje, jak wychwycić UniqueConstraintViolationException, co dzieje się podczas próby wstawienia użytkownika z adresem e-mail, który już istnieje w bazie danych (zakładając, że kolumna email ma unikalny indeks):

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();
}
wersja: 4.0