Nette Documentation Preview

syntax
Εξαιρέσεις
**********

Το 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).

```php
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:
}
```

Εξαιρέσεις

Το 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:
}