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() e getParameters() 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();
}
versione: 4.0