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