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