Excepții
Nette Database utilizează o ierarhie de excepții. Clasa de bază este Nette\Database\DriverException
, care
extinde PDOException
și oferă funcționalități îmbunătățite pentru lucrul cu erorile bazei de date:
- Metoda
getDriverCode()
returnează codul de eroare de la driverul bazei de date. - Metoda
getSqlState()
returnează codul SQLSTATE. - Puteți utiliza metodele
getQueryString()
șigetParameters()
pentru a recupera interogarea originală și parametrii acesteia.
Clasa DriverException
este extinsă prin următoarele excepții specializate:
ConnectionException
– indică un eșec al conectării la serverul bazei de date.ConstraintViolationException
– clasa de bază pentru încălcarea constrângerilor bazei de date, din care moștenesc următoarele excepții:ForeignKeyConstraintViolationException
– încălcarea unei constrângeri de tip cheie străină.NotNullConstraintViolationException
– încălcarea unei constrângeri NOT NULL.UniqueConstraintViolationException
– încălcarea unei constrângeri de unicitate.
Următorul exemplu demonstrează cum se poate detecta un UniqueConstraintViolationException
, care apare atunci
când se încearcă introducerea unui utilizator cu un e-mail care există deja în baza de date (presupunând că coloana
email
are un indice unic):
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'A user with this email already exists.';
} catch (Nette\Database\DriverException $e) {
echo 'An error occurred during registration: ' . $e->getMessage();
}