-
-
Notifications
You must be signed in to change notification settings - Fork 277
Expand file tree
/
Copy pathexceptions.texy
More file actions
34 lines (26 loc) · 2.26 KB
/
exceptions.texy
File metadata and controls
34 lines (26 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Изключения
**********
Nette Database използва йерархия от изключения. Основният клас е `Nette\Database\DriverException`, който наследява от `PDOException` и предоставя разширени възможности за работа с грешки в базата данни:
- Методът `getDriverCode()` връща кода на грешката от драйвера на базата данни
- Методът `getSqlState()` връща SQLSTATE кода
- Методите `getQueryString()` и `getParameters()` позволяват да се получи оригиналната заявка и нейните параметри
От `DriverException` наследяват следните специализирани изключения:
- `ConnectionException` - сигнализира за неуспешно свързване към сървъра на базата данни
- `ConstraintViolationException` - основен клас за нарушаване на ограниченията на базата данни, от който наследяват:
- `ForeignKeyConstraintViolationException` - нарушаване на външен ключ
- `NotNullConstraintViolationException` - нарушаване на ограничението NOT NULL
- `UniqueConstraintViolationException` - нарушаване на уникалността на стойността
Пример за прихващане на изключение `UniqueConstraintViolationException`, което възниква, когато се опитваме да вмъкнем потребител с имейл, който вече съществува в базата данни (при условие, че колоната email има уникален индекс).
```php
try {
$database->query('INSERT INTO users', [
'email' => '[email protected]',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Потребител с този имейл вече съществува.';
} catch (Nette\Database\DriverException $e) {
echo 'Възникна грешка при регистрацията: ' . $e->getMessage();
}
```