Винятки
Nette Database використовує ієрархію винятків. Базовим класом є
Nette\Database\DriverException
, який успадковує від PDOException
і надає
розширені можливості для роботи з помилками бази даних:
- Метод
getDriverCode()
повертає код помилки від драйвера бази даних - Метод
getSqlState()
повертає код SQLSTATE - Методи
getQueryString()
таgetParameters()
дозволяють отримати початковий запит та його параметри
Від DriverException
успадковуються наступні спеціалізовані
винятки:
ConnectionException
– сигналізує про збій підключення до сервера бази данихConstraintViolationException
– базовий клас для порушення обмежень бази даних, від якого успадковуються:ForeignKeyConstraintViolationException
– порушення зовнішнього ключаNotNullConstraintViolationException
– порушення обмеження NOT NULLUniqueConstraintViolationException
– порушення унікальності значення
Приклад перехоплення винятку UniqueConstraintViolationException
, який
виникає, коли ми намагаємося вставити користувача з email, який вже існує
в базі даних (за умови, що стовпець email має унікальний індекс).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Користувач з цим email вже існує.';
} catch (Nette\Database\DriverException $e) {
echo 'Сталася помилка під час реєстрації: ' . $e->getMessage();
}