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