Εξαιρέσεις
Το 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:
}