Nette Documentation Preview

syntax
Изключения
**********

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

- Методът `getDriverCode()` връща кода на грешката от драйвера на базата данни.
- Методът `getSqlState()` връща кода на SQLSTATE.
- Можете да използвате методите `getQueryString()` и `getParameters()`, за да извлечете оригиналната заявка и нейните параметри.

Класът `DriverException` е разширен със следните специализирани изключения:

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


Следващият пример демонстрира как да уловите `UniqueConstraintViolationException`, което се случва при опит за вмъкване на потребител с имейл, който вече съществува в базата данни (при условие че колоната `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 използва йерархия от изключения. Базовият клас е Nette\Database\DriverException, който разширява PDOException и предоставя разширена функционалност за работа с грешки в базата данни:

  • Методът getDriverCode() връща кода на грешката от драйвера на базата данни.
  • Методът getSqlState() връща кода на SQLSTATE.
  • Можете да използвате методите getQueryString() и getParameters(), за да извлечете оригиналната заявка и нейните параметри.

Класът DriverException е разширен със следните специализирани изключения:

  • ConnectionException – показва неуспешно свързване със сървъра на базата данни.
  • ConstraintViolationException – базов клас за нарушения на ограниченията на базата данни, от който наследяват следните изключения:
    • ForeignKeyConstraintViolationException – нарушение на ограничението на чужд ключ.
    • NotNullConstraintViolationException – нарушение на ограничението NOT NULL.
    • UniqueConstraintViolationException – нарушение на ограничението за уникалност.

Следващият пример демонстрира как да уловите UniqueConstraintViolationException, което се случва при опит за вмъкване на потребител с имейл, който вече съществува в базата данни (при условие че колоната 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();
}