Nette Documentation Preview

syntax
Excepții
********

Nette Database utilizează o ierarhie de excepții. Clasa de bază este `Nette\Database\DriverException`, care extinde `PDOException` și oferă funcționalități îmbunătățite pentru lucrul cu erorile bazei de date:

- Metoda `getDriverCode()` returnează codul de eroare de la driverul bazei de date.
- Metoda `getSqlState()` returnează codul SQLSTATE.
- Puteți utiliza metodele `getQueryString()` și `getParameters()` pentru a recupera interogarea originală și parametrii acesteia.

Clasa `DriverException` este extinsă prin următoarele excepții specializate:

- `ConnectionException` - indică un eșec al conectării la serverul bazei de date.
- `ConstraintViolationException` - clasa de bază pentru încălcarea constrângerilor bazei de date, din care moștenesc următoarele excepții:
  - `ForeignKeyConstraintViolationException` - încălcarea unei constrângeri de tip cheie străină.
  - `NotNullConstraintViolationException` - încălcarea unei constrângeri NOT NULL.
  - `UniqueConstraintViolationException` - încălcarea unei constrângeri de unicitate.


Următorul exemplu demonstrează cum se poate detecta un `UniqueConstraintViolationException`, care apare atunci când se încearcă introducerea unui utilizator cu un e-mail care există deja în baza de date (presupunând că coloana `email` are un indice unic):

```php
try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'A user with this email already exists.';

} catch (Nette\Database\DriverException $e) {
	echo 'An error occurred during registration: ' . $e->getMessage();
}
```

Excepții

Nette Database utilizează o ierarhie de excepții. Clasa de bază este Nette\Database\DriverException, care extinde PDOException și oferă funcționalități îmbunătățite pentru lucrul cu erorile bazei de date:

  • Metoda getDriverCode() returnează codul de eroare de la driverul bazei de date.
  • Metoda getSqlState() returnează codul SQLSTATE.
  • Puteți utiliza metodele getQueryString() și getParameters() pentru a recupera interogarea originală și parametrii acesteia.

Clasa DriverException este extinsă prin următoarele excepții specializate:

  • ConnectionException – indică un eșec al conectării la serverul bazei de date.
  • ConstraintViolationException – clasa de bază pentru încălcarea constrângerilor bazei de date, din care moștenesc următoarele excepții:
    • ForeignKeyConstraintViolationException – încălcarea unei constrângeri de tip cheie străină.
    • NotNullConstraintViolationException – încălcarea unei constrângeri NOT NULL.
    • UniqueConstraintViolationException – încălcarea unei constrângeri de unicitate.

Următorul exemplu demonstrează cum se poate detecta un UniqueConstraintViolationException, care apare atunci când se încearcă introducerea unui utilizator cu un e-mail care există deja în baza de date (presupunând că coloana email are un indice unic):

try {
	$database->query('INSERT INTO users', [
		'email' => 'john@example.com',
		'name' => 'John Doe',
		'password' => $hashedPassword,
	]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
	echo 'A user with this email already exists.';

} catch (Nette\Database\DriverException $e) {
	echo 'An error occurred during registration: ' . $e->getMessage();
}