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` имеет уникальный индекс):

```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 имеет уникальный индекс):

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