Eccezioni
Nette Database utilizza una gerarchia di eccezioni. La classe base è Nette\Database\DriverException
, che eredita
da PDOException
e fornisce funzionalità estese per la gestione degli errori del database:
- Il metodo
getDriverCode()
restituisce il codice di errore dal driver del database - Il metodo
getSqlState()
restituisce il codice SQLSTATE - I metodi
getQueryString()
egetParameters()
consentono di ottenere la query originale e i suoi parametri
Da DriverException
ereditano le seguenti eccezioni specializzate:
ConnectionException
– segnala un fallimento della connessione al server del databaseConstraintViolationException
– classe base per la violazione dei vincoli del database, da cui ereditano:ForeignKeyConstraintViolationException
– violazione della chiave esternaNotNullConstraintViolationException
– violazione del vincolo NOT NULLUniqueConstraintViolationException
– violazione dell'unicità del valore
Esempio di cattura dell'eccezione UniqueConstraintViolationException
, che si verifica quando cerchiamo di inserire
un utente con un'email che esiste già nel database (presupponendo che la colonna email abbia un indice univoco).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Esiste già un utente con questa email.';
} catch (Nette\Database\DriverException $e) {
echo 'Si è verificato un errore durante la registrazione: ' . $e->getMessage();
}