Nette Documentation Preview

syntax
Винятки
*******

Nette Database використовує ієрархію винятків. Базовим класом є `Nette\Database\DriverException`, який розширює `PDOException` і надає розширену функціональність для роботи з помилками бази даних:

- Метод `getDriverCode()` повертає код помилки з драйвера бази даних.
- Метод `getSqlState()` повертає код SQLSTATE.
- Ви можете використовувати методи `getQueryString()` та `getParameters()` для отримання вихідного запиту та його параметрів.

Клас `DriverException` розширено наступними спеціалізованими винятками:

- `ConnectionException` - вказує на помилку з'єднання з сервером бази даних.
- `ConstraintViolationException` - базовий клас для порушень обмежень бази даних, від якого успадковуються наступні виключення:
  - `ForeignKeyConstraintViolationException` - порушення обмеження зовнішнього ключа.
  - `NotNullConstraintViolationException` - порушення обмеження NOT NULL.
  - `UniqueConstraintViolationException` - порушення обмеження унікальності.


Наступний приклад демонструє, як перехопити помилку `UniqueConstraintViolationException`, яка виникає при спробі вставити користувача з email, який вже існує в базі даних (за умови, що стовпець `email` має унікальний індекс):

```php
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();
}
```

Винятки

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();
}