Винятки
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();
}