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()
șigetParameters()
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 dateConstraintViolationException
– clasa de bază pentru încălcarea constrângerilor bazei de date, din care moștenesc:ForeignKeyConstraintViolationException
– încălcarea cheii străineNotNullConstraintViolationException
– încălcarea constrângerii NOT NULLUniqueConstraintViolationException
– î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();
}