Εξαιρέσεις
Η Nette Database χρησιμοποιεί μια ιεραρχία εξαιρέσεων. Η βασική κλάση είναι
η Nette\Database\DriverException
, η οποία επεκτείνει την PDOException
και
παρέχει βελτιωμένη λειτουργικότητα για την εργασία με σφάλματα της
βάσης δεδομένων:
- Η μέθοδος
getDriverCode()
επιστρέφει τον κωδικό σφάλματος από το πρόγραμμα οδήγησης της βάσης δεδομένων. - Η μέθοδος
getSqlState()
επιστρέφει τον κωδικό SQLSTATE. - Μπορείτε να χρησιμοποιήσετε τις μεθόδους
getQueryString()
καιgetParameters()
για να ανακτήσετε το αρχικό ερώτημα και τις παραμέτρους του.
Η κλάση DriverException
επεκτείνεται από τις ακόλουθες
εξειδικευμένες εξαιρέσεις:
ConnectionException
– υποδεικνύει αποτυχία σύνδεσης με το διακομιστή βάσης δεδομένων.ConstraintViolationException
– η βασική κλάση για παραβιάσεις περιορισμών της βάσης δεδομένων, από την οποία κληρονομούν οι ακόλουθες εξαιρέσεις:ForeignKeyConstraintViolationException
– παραβίαση περιορισμού ξένου κλειδιού.NotNullConstraintViolationException
– παραβίαση περιορισμού NOT NULL.UniqueConstraintViolationException
– παραβίαση περιορισμού μοναδικότητας.
Το ακόλουθο παράδειγμα δείχνει πώς να πιάσετε ένα
UniqueConstraintViolationException
, το οποίο συμβαίνει κατά την προσπάθεια
εισαγωγής ενός χρήστη με ένα email που υπάρχει ήδη στη βάση δεδομένων
(υποθέτοντας ότι η στήλη email
έχει μοναδικό δείκτη):
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();
}