Εξαιρέσεις

Η 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();
}
έκδοση: 4.0