Nette Documentation Preview

syntax
Výjimky
*******

Nette Database používá hierarchii výjimek. Základní třídou je `Nette\Database\DriverException`, která dědí z `PDOException` a poskytuje rozšířené možnosti pro práci s chybami databáze:

- Metoda `getDriverCode()` vrací kód chyby od databázového driveru
- Metoda `getSqlState()` vrací SQLSTATE kód
- Metody `getQueryString()` a `getParameters()` umožňují získat původní dotaz a jeho parametry

Z `DriverException` dědí následující specializované výjimky:

- `ConnectionException` - signalizuje selhání připojení k databázovému serveru
- `ConstraintViolationException` - základní třída pro porušení databázových omezení, ze které dědí:
  - `ForeignKeyConstraintViolationException` - porušení cizího klíče
  - `NotNullConstraintViolationException` - porušení NOT NULL omezení
  - `UniqueConstraintViolationException` - porušení unikátnosti hodnoty


Příklad zachytávání výjimky `UniqueConstraintViolationException`, která nastane, když se snažíme vložit uživatele s emailem, který už v databázi existuje (za předpokladu, že sloupec email má unikátní index).

```php
try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Uživatel s tímto emailem již existuje.';

} catch (Nette\Database\DriverException $e) {
	echo 'Došlo k chybě při registraci: ' . $e->getMessage();
}
```

Výjimky

Nette Database používá hierarchii výjimek. Základní třídou je Nette\Database\DriverException, která dědí z PDOException a poskytuje rozšířené možnosti pro práci s chybami databáze:

  • Metoda getDriverCode() vrací kód chyby od databázového driveru
  • Metoda getSqlState() vrací SQLSTATE kód
  • Metody getQueryString() a getParameters() umožňují získat původní dotaz a jeho parametry

Z DriverException dědí následující specializované výjimky:

  • ConnectionException – signalizuje selhání připojení k databázovému serveru
  • ConstraintViolationException – základní třída pro porušení databázových omezení, ze které dědí:
    • ForeignKeyConstraintViolationException – porušení cizího klíče
    • NotNullConstraintViolationException – porušení NOT NULL omezení
    • UniqueConstraintViolationException – porušení unikátnosti hodnoty

Příklad zachytávání výjimky UniqueConstraintViolationException, která nastane, když se snažíme vložit uživatele s emailem, který už v databázi existuje (za předpokladu, že sloupec email má unikátní index).

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'Uživatel s tímto emailem již existuje.';

} catch (Nette\Database\DriverException $e) {
	echo 'Došlo k chybě při registraci: ' . $e->getMessage();
}