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() e getParameters() 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 database
  • ConstraintViolationException – classe base per la violazione dei vincoli del database, da cui ereditano:
    • ForeignKeyConstraintViolationException – violazione della chiave esterna
    • NotNullConstraintViolationException – violazione del vincolo NOT NULL
    • UniqueConstraintViolationException – 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();
}
versione: 4.0