Výjimky
Nette Database používá hierarchii výjimek. Základní třídou je Nette\Database\DriverException
, která
dědí z PDOException
a poskytuje rozšířené možnosti pro práci s chybami databáze:
- Metoda
getDriverCode()
vrací kód chyby od databázového driveru - Metoda
getSqlState()
vrací SQLSTATE kód - Metody
getQueryString()
agetParameters()
umožňují získat původní dotaz a jeho parametry
Z DriverException
dědí následující specializované výjimky:
ConnectionException
– signalizuje selhání připojení k databázovému serveruConstraintViolationException
– základní třída pro porušení databázových omezení, ze které dědí:ForeignKeyConstraintViolationException
– porušení cizího klíčeNotNullConstraintViolationException
– porušení NOT NULL omezeníUniqueConstraintViolationException
– porušení unikátnosti hodnoty
Příklad zachytávání výjimky UniqueConstraintViolationException
, která nastane, když se snažíme vložit
uživatele s emailem, který už v databázi existuje (za předpokladu, že sloupec email má unikátní index).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Uživatel s tímto emailem již existuje.';
} catch (Nette\Database\DriverException $e) {
echo 'Došlo k chybě při registraci: ' . $e->getMessage();
}