Exceptions

Nette Database utilise une hiérarchie d'exceptions. La classe de base est Nette\Database\DriverException, qui hérite de PDOException et offre des fonctionnalités étendues pour travailler avec les erreurs de base de données :

  • La méthode getDriverCode() renvoie le code d'erreur spécifique au pilote de base de données.
  • La méthode getSqlState() renvoie le code SQLSTATE standard.
  • Les méthodes getQueryString() et getParameters() permettent d'obtenir la requête SQL d'origine et ses paramètres.

Les exceptions spécialisées suivantes héritent de DriverException :

  • ConnectionException – signale un échec de connexion au serveur de base de données
  • ConstraintViolationException – classe de base pour la violation des contraintes de base de données, dont héritent :
    • ForeignKeyConstraintViolationException – violation de clé étrangère
    • NotNullConstraintViolationException – violation de contrainte NOT NULL
    • UniqueConstraintViolationException – violation de l'unicité de la valeur

Exemple de capture de l'exception UniqueConstraintViolationException, qui se produit lorsque nous essayons d'insérer un utilisateur avec un e-mail qui existe déjà dans la base de données (en supposant que la colonne email a un index unique).

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Un utilisateur avec cet e-mail existe déjà.';

} catch (Nette\Database\DriverException $e) {
	echo 'Une erreur s\'est produite lors de l\'inscription : ' . $e->getMessage();
}
version: 4.0