Excepții

Nette Database utilizează o ierarhie de excepții. Clasa de bază este Nette\Database\DriverException, care moștenește din PDOException și oferă posibilități extinse pentru lucrul cu erorile bazei de date:

  • Metoda getDriverCode() returnează codul de eroare de la driverul bazei de date
  • Metoda getSqlState() returnează codul SQLSTATE
  • Metodele getQueryString() și getParameters() permit obținerea interogării originale și a parametrilor săi

Din DriverException moștenesc următoarele excepții specializate:

  • ConnectionException – semnalează eșecul conexiunii la serverul bazei de date
  • ConstraintViolationException – clasa de bază pentru încălcarea constrângerilor bazei de date, din care moștenesc:
    • ForeignKeyConstraintViolationException – încălcarea cheii străine
    • NotNullConstraintViolationException – încălcarea constrângerii NOT NULL
    • UniqueConstraintViolationException – încălcarea unicității valorii

Exemplu de capturare a excepției UniqueConstraintViolationException, care apare atunci când încercăm să inserăm un utilizator cu un email care există deja în baza de date (presupunând că coloana email are un index unic).

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Utilizatorul cu acest email există deja.';

} catch (Nette\Database\DriverException $e) {
	echo 'A apărut o eroare la înregistrare: ' . $e->getMessage();
}
versiune: 4.0