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() a getParameters() 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 serveru
  • ConstraintViolationException – základní třída pro porušení databázových omezení, ze které dědí:
    • ForeignKeyConstraintViolationException – porušení cizího klíče
    • NotNullConstraintViolationException – 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();
}
verze: 4.0 3.x