Nette Documentation Preview

syntax
Wyjątki
*******

Nette Database używa hierarchii wyjątków. Podstawową klasą jest `Nette\Database\DriverException`, która dziedziczy z `PDOException` i zapewnia rozszerzone możliwości pracy z błędami bazy danych:

- Metoda `getDriverCode()` zwraca kod błędu od sterownika bazy danych
- Metoda `getSqlState()` zwraca kod SQLSTATE
- Metody `getQueryString()` i `getParameters()` umożliwiają uzyskanie pierwotnego zapytania i jego parametrów

Z `DriverException` dziedziczą następujące wyspecjalizowane wyjątki:

- `ConnectionException` - sygnalizuje niepowodzenie połączenia z serwerem bazy danych
- `ConstraintViolationException` - podstawowa klasa dla naruszenia ograniczeń bazy danych, z której dziedziczą:
  - `ForeignKeyConstraintViolationException` - naruszenie klucza obcego
  - `NotNullConstraintViolationException` - naruszenie ograniczenia NOT NULL
  - `UniqueConstraintViolationException` - naruszenie unikalności wartości


Przykład przechwytywania wyjątku `UniqueConstraintViolationException`, który występuje, gdy próbujemy wstawić użytkownika z adresem e-mail, który już istnieje w bazie danych (zakładając, że kolumna email ma unikalny indeks).

```php
try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Użytkownik o tym adresie e-mail już istnieje.';

} catch (Nette\Database\DriverException $e) {
	echo 'Wystąpił błąd podczas rejestracji: ' . $e->getMessage();
}
```

Wyjątki

Nette Database używa hierarchii wyjątków. Podstawową klasą jest Nette\Database\DriverException, która dziedziczy z PDOException i zapewnia rozszerzone możliwości pracy z błędami bazy danych:

  • Metoda getDriverCode() zwraca kod błędu od sterownika bazy danych
  • Metoda getSqlState() zwraca kod SQLSTATE
  • Metody getQueryString() i getParameters() umożliwiają uzyskanie pierwotnego zapytania i jego parametrów

Z DriverException dziedziczą następujące wyspecjalizowane wyjątki:

  • ConnectionException – sygnalizuje niepowodzenie połączenia z serwerem bazy danych
  • ConstraintViolationException – podstawowa klasa dla naruszenia ograniczeń bazy danych, z której dziedziczą:
    • ForeignKeyConstraintViolationException – naruszenie klucza obcego
    • NotNullConstraintViolationException – naruszenie ograniczenia NOT NULL
    • UniqueConstraintViolationException – naruszenie unikalności wartości

Przykład przechwytywania wyjątku UniqueConstraintViolationException, który występuje, gdy próbujemy wstawić użytkownika z adresem e-mail, który już istnieje w bazie danych (zakładając, że kolumna email ma unikalny indeks).

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Użytkownik o tym adresie e-mail już istnieje.';

} catch (Nette\Database\DriverException $e) {
	echo 'Wystąpił błąd podczas rejestracji: ' . $e->getMessage();
}