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