Wyjątki
Nette Database używa hierarchii wyjątków. Podstawową klasą jest Nette\Database\DriverException
, która
dziedziczy z PDOException
i zapewnia rozszerzone możliwości pracy z błędami bazy danych:
- Metoda
getDriverCode()
zwraca kod błędu od sterownika bazy danych - Metoda
getSqlState()
zwraca kod SQLSTATE - Metody
getQueryString()
igetParameters()
umożliwiają uzyskanie pierwotnego zapytania i jego parametrów
Z DriverException
dziedziczą następujące wyspecjalizowane wyjątki:
ConnectionException
– sygnalizuje niepowodzenie połączenia z serwerem bazy danychConstraintViolationException
– podstawowa klasa dla naruszenia ograniczeń bazy danych, z której dziedziczą:ForeignKeyConstraintViolationException
– naruszenie klucza obcegoNotNullConstraintViolationException
– naruszenie ograniczenia NOT NULLUniqueConstraintViolationException
– naruszenie unikalności wartości
Przykład przechwytywania wyjątku UniqueConstraintViolationException
, który występuje, gdy próbujemy wstawić
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 'Użytkownik o tym adresie e-mail już istnieje.';
} catch (Nette\Database\DriverException $e) {
echo 'Wystąpił błąd podczas rejestracji: ' . $e->getMessage();
}