Izjeme
Podatkovna baza Nette uporablja hierarhijo izjem. Osnovni razred je Nette\Database\DriverException
, ki razširja
PDOException
in zagotavlja izboljšano funkcionalnost za delo z napakami podatkovne zbirke:
- Metoda
getDriverCode()
vrne kodo napake iz gonilnika zbirke podatkov. - Metoda
getSqlState()
vrne kodo SQLSTATE. - Metodi
getQueryString()
ingetParameters()
lahko uporabite za pridobitev prvotne poizvedbe in njenih parametrov.
Razred DriverException
je razširjen z naslednjimi specializiranimi izjemami:
ConnectionException
– označuje neuspešno vzpostavitev povezave s strežnikom podatkovne zbirke.ConstraintViolationException
– osnovni razred za kršitve omejitev podatkovne zbirke, iz katerega dedujejo naslednje izjeme:ForeignKeyConstraintViolationException
– kršitev omejitve tujega ključa.NotNullConstraintViolationException
– kršitev omejitve NOT NULL.UniqueConstraintViolationException
– kršitev omejitve edinstvenosti.
Naslednji primer prikazuje, kako ujeti UniqueConstraintViolationException
, kar se zgodi pri poskusu vstavitve
uporabnika z elektronskim naslovom, ki že obstaja v zbirki podatkov (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 'A user with this email already exists.';
} catch (Nette\Database\DriverException $e) {
echo 'An error occurred during registration: ' . $e->getMessage();
}