Εξαιρέσεις

Το Nette Database χρησιμοποιεί μια ιεραρχία εξαιρέσεων. Η βασική κλάση είναι η Nette\Database\DriverException, η οποία κληρονομεί από την PDOException και παρέχει διευρυμένες δυνατότητες για την εργασία με σφάλματα βάσης δεδομένων:

  • Η μέθοδος getDriverCode() επιστρέφει τον κωδικό σφάλματος από τον οδηγό (driver) της βάσης δεδομένων.
  • Η μέθοδος getSqlState() επιστρέφει τον κωδικό SQLSTATE.
  • Οι μέθοδοι getQueryString() και getParameters() επιτρέπουν την απόκτηση του αρχικού ερωτήματος (query) και των παραμέτρων του.

Από την DriverException κληρονομούν οι ακόλουθες εξειδικευμένες εξαιρέσεις:

  • ConnectionException – σηματοδοτεί αποτυχία σύνδεσης στον διακομιστή της βάσης δεδομένων.
  • ConstraintViolationException – βασική κλάση για παραβίαση περιορισμών βάσης δεδομένων, από την οποία κληρονομούν:
    • ForeignKeyConstraintViolationException – παραβίαση ξένου κλειδιού.
    • NotNullConstraintViolationException – παραβίαση περιορισμού NOT NULL.
    • UniqueConstraintViolationException – παραβίαση μοναδικότητας τιμής.

Παράδειγμα σύλληψης της εξαίρεσης UniqueConstraintViolationException, η οποία προκύπτει όταν προσπαθούμε να εισαγάγουμε έναν χρήστη με email που υπάρχει ήδη στη βάση δεδομένων (υποθέτοντας ότι η στήλη email έχει μοναδικό ευρετήριο – unique index).

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Υπάρχει ήδη χρήστης με αυτό το email.'; // User with this email already exists.

} catch (Nette\Database\DriverException $e) {
	echo 'Παρουσιάστηκε σφάλμα κατά την εγγραφή: ' . $e->getMessage(); // An error occurred during registration:
}
έκδοση: 4.0