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();
}