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()etgetParameters()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éesConstraintViolationException– classe de base pour la violation des contraintes de base de données, dont héritent :ForeignKeyConstraintViolationException– violation de clé étrangèreNotNullConstraintViolationException– violation de contrainte NOT NULLUniqueConstraintViolationException– 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();
}