Nette Documentation Preview

syntax
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):

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

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