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