Изключения
Базата данни 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();
}