Nette Documentation Preview

syntax
Exceptions
**********

La base de données Nette utilise une hiérarchie d'exceptions. La classe de base est `Nette\Database\DriverException`, qui étend `PDOException` et fournit des fonctionnalités améliorées pour traiter les erreurs de base de données :

- La méthode `getDriverCode()` renvoie le code d'erreur du pilote de la base de données.
- La méthode `getSqlState()` renvoie le code SQLSTATE.
- Vous pouvez utiliser les méthodes `getQueryString()` et `getParameters()` pour récupérer la requête originale et ses paramètres.

La classe `DriverException` est étendue par les exceptions spécialisées suivantes :

- `ConnectionException` - indique un échec de connexion au serveur de base de données.
- `ConstraintViolationException` - classe de base pour les violations de contraintes de la base de données, dont les exceptions suivantes héritent :
  - `ForeignKeyConstraintViolationException` - violation d'une contrainte de clé étrangère.
  - `NotNullConstraintViolationException` - violation d'une contrainte NOT NULL.
  - `UniqueConstraintViolationException` - violation d'une contrainte d'unicité.


L'exemple suivant montre comment détecter une erreur `UniqueConstraintViolationException`, qui se produit lorsqu'on essaie d'insérer un utilisateur dont l'adresse électronique existe déjà dans la base de données (en supposant que la colonne `email` dispose d'un index unique) :

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

Exceptions

La base de données Nette utilise une hiérarchie d'exceptions. La classe de base est Nette\Database\DriverException, qui étend PDOException et fournit des fonctionnalités améliorées pour traiter les erreurs de base de données :

  • La méthode getDriverCode() renvoie le code d'erreur du pilote de la base de données.
  • La méthode getSqlState() renvoie le code SQLSTATE.
  • Vous pouvez utiliser les méthodes getQueryString() et getParameters() pour récupérer la requête originale et ses paramètres.

La classe DriverException est étendue par les exceptions spécialisées suivantes :

  • ConnectionException – indique un échec de connexion au serveur de base de données.
  • ConstraintViolationException – classe de base pour les violations de contraintes de la base de données, dont les exceptions suivantes héritent :
    • ForeignKeyConstraintViolationException – violation d'une contrainte de clé étrangère.
    • NotNullConstraintViolationException – violation d'une contrainte NOT NULL.
    • UniqueConstraintViolationException – violation d'une contrainte d'unicité.

L'exemple suivant montre comment détecter une erreur UniqueConstraintViolationException, qui se produit lorsqu'on essaie d'insérer un utilisateur dont l'adresse électronique existe déjà dans la base de données (en supposant que la colonne email dispose d'un index unique) :

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