Ausnahmen
Nette Database verwendet eine Hierarchie von Ausnahmen. 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 Ausnahmen:
ConnectionException
– signalisiert einen Verbindungsfehler zum DatenbankserverConstraintViolationException
– Basisklasse für Verletzungen von Datenbankbeschränkungen, von der erben:ForeignKeyConstraintViolationException
– Verletzung eines FremdschlüsselsNotNullConstraintViolationException
– Verletzung einer NOT NULL-BeschränkungUniqueConstraintViolationException
– 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 E-Mail-Spalte
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 'Ein Benutzer mit dieser E-Mail-Adresse existiert bereits.';
} catch (Nette\Database\DriverException $e) {
echo 'Bei der Registrierung ist ein Fehler aufgetreten: ' . $e->getMessage();
}