Izjeme

Nette Database uporablja hierarhijo izjem. Osnovni razred je Nette\Database\DriverException, ki deduje iz PDOException in nudi razširjene možnosti za delo z napakami podatkovne baze:

  • Metoda getDriverCode() vrača kodo napake od gonilnika podatkovne baze
  • Metoda getSqlState() vrača kodo SQLSTATE
  • Metodi getQueryString() in getParameters() omogočata pridobitev prvotne poizvedbe in njenih parametrov

Iz DriverException dedujejo naslednje specializirane izjeme:

  • ConnectionException – signalizira neuspeh povezave s podatkovnim strežnikom
  • ConstraintViolationException – osnovni razred za kršitve podatkovnih omejitev, iz katerega dedujejo:
    • ForeignKeyConstraintViolationException – kršitev tujega ključa
    • NotNullConstraintViolationException – kršitev omejitve NOT NULL
    • UniqueConstraintViolationException – kršitev edinstvenosti vrednosti

Primer lovljenja izjeme UniqueConstraintViolationException, ki nastane, ko poskušamo vstaviti uporabnika z e-pošto, ki že obstaja v podatkovni bazi (ob predpostavki, da ima stolpec email edinstven indeks).

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Uporabnik s tem e-naslovom že obstaja.';

} catch (Nette\Database\DriverException $e) {
	echo 'Pri registraciji je prišlo do napake: ' . $e->getMessage();
}
različica: 4.0