Ausnahmen
Nette Database verwendet eine Hierarchie von Ausnahmen. Die Basisklasse ist Nette\Database\DriverException
, die
PDOException
erweitert und erweiterte Funktionen für die Arbeit mit Datenbankfehlern bietet:
- Die Methode
getDriverCode()
gibt den Fehlercode des Datenbanktreibers zurück. - Die Methode
getSqlState()
gibt den SQLSTATE-Code zurück. - Sie können die Methoden
getQueryString()
undgetParameters()
verwenden, um die ursprüngliche Abfrage und ihre Parameter abzurufen.
Die Klasse DriverException
wird um die folgenden spezialisierten Ausnahmen erweitert:
ConnectionException
– zeigt eine fehlgeschlagene Verbindung zum Datenbankserver an.ConstraintViolationException
– die Basisklasse für Datenbankeinschränkungsverletzungen, von der die folgenden Ausnahmen erben:ForeignKeyConstraintViolationException
– Verstoß gegen eine Fremdschlüssel-Beschränkung.NotNullConstraintViolationException
– Verstoß gegen eine NOT NULL-Beschränkung.UniqueConstraintViolationException
– Verletzung einer Einzigartigkeitsbeschränkung.
Das folgende Beispiel zeigt, wie ein UniqueConstraintViolationException
abgefangen werden kann, wenn versucht
wird, einen Benutzer mit einer E-Mail einzufügen, die bereits in der Datenbank vorhanden ist (vorausgesetzt, die Spalte
email
hat einen eindeutigen Index):
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();
}