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