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