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