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()
igetParameters()
, 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();
}