Eccezioni
Nette Database utilizza una gerarchia di eccezioni. La classe di base è Nette\Database\DriverException
, che
estende PDOException
e fornisce funzionalità avanzate per lavorare con gli errori del database:
- Il metodo
getDriverCode()
restituisce il codice di errore del driver del database. - Il metodo
getSqlState()
restituisce il codice SQLSTATE. - È possibile utilizzare i metodi
getQueryString()
egetParameters()
per recuperare la query originale e i suoi parametri.
La classe DriverException
è estesa dalle seguenti eccezioni specializzate:
ConnectionException
– indica una mancata connessione al server di database.ConstraintViolationException
– classe di base per le violazioni dei vincoli del database, da cui ereditano le seguenti eccezioni:ForeignKeyConstraintViolationException
– violazione di un vincolo di chiave esterna.NotNullConstraintViolationException
– violazione di un vincolo NOT NULL.UniqueConstraintViolationException
– violazione di un vincolo di unicità.
L'esempio seguente mostra come catturare un vincolo UniqueConstraintViolationException
, che si verifica quando si
cerca di inserire un utente con un'e-mail già esistente nel database (supponendo 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 'A user with this email already exists.';
} catch (Nette\Database\DriverException $e) {
echo 'An error occurred during registration: ' . $e->getMessage();
}