Ausnahmen
Nette Database verwendet eine Hierarchie von Ausnahmeklassen. Die Basisklasse ist Nette\Database\DriverException,
die von PDOException erbt und erweiterte Möglichkeiten zur Fehlerbehandlung bei Datenbankfehlern bietet:
- Die Methode
getDriverCode()gibt den Fehlercode des Datenbanktreibers zurück. - Die Methode
getSqlState()gibt den SQLSTATE-Code zurück. - Die Methoden
getQueryString()undgetParameters()ermöglichen es, die ursprüngliche Abfrage und ihre Parameter abzurufen.
Von DriverException erben die folgenden spezialisierten Ausnahmeklassen:
ConnectionException– signalisiert einen Verbindungsfehler zum Datenbankserver.ConstraintViolationException– Basisklasse für Verletzungen von Datenbankbeschränkungen, von der erben:ForeignKeyConstraintViolationException– Verletzung eines Fremdschlüssels.NotNullConstraintViolationException– Verletzung einer NOT NULL-Beschränkung.UniqueConstraintViolationException– Verletzung der Eindeutigkeit eines Wertes.
Beispiel für das Abfangen der Ausnahme UniqueConstraintViolationException, die auftritt, wenn versucht wird,
einen Benutzer mit einer E-Mail-Adresse einzufügen, die bereits in der Datenbank vorhanden ist (vorausgesetzt, die
email-Spalte hat einen UNIQUE-Index).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Ein Benutzer mit dieser E-Mail-Adresse existiert bereits.';
} catch (Nette\Database\DriverException $e) {
echo 'Bei der Registrierung ist ein Fehler aufgetreten: ' . $e->getMessage();
}