Nette Documentation Preview

syntax
Excepciones
***********

Nette Database utiliza una jerarquía de excepciones. La clase base es `Nette\Database\DriverException`, que extiende `PDOException` y proporciona una funcionalidad mejorada para trabajar con errores de base de datos:

- El método `getDriverCode()` devuelve el código de error del controlador de la base de datos.
- El método `getSqlState()` devuelve el código SQLSTATE.
- Puede utilizar los métodos `getQueryString()` y `getParameters()` para recuperar la consulta original y sus parámetros.

La clase `DriverException` se extiende con las siguientes excepciones especializadas:

- `ConnectionException` - indica un fallo en la conexión con el servidor de base de datos.
- `ConstraintViolationException` - la clase base para violaciones de restricciones de base de datos, de la cual heredan las siguientes excepciones:
  - `ForeignKeyConstraintViolationException` - violación de una restricción de clave externa.
  - `NotNullConstraintViolationException` - violación de una restricción NOT NULL.
  - `UniqueConstraintViolationException` - violación de una restricción de unicidad.


El siguiente ejemplo muestra cómo detectar una `UniqueConstraintViolationException`, que se produce al intentar insertar un usuario con un correo electrónico que ya existe en la base de datos (suponiendo que la columna `email` tenga un índice único):

```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();
}
```

Excepciones

Nette Database utiliza una jerarquía de excepciones. La clase base es Nette\Database\DriverException, que extiende PDOException y proporciona una funcionalidad mejorada para trabajar con errores de base de datos:

  • El método getDriverCode() devuelve el código de error del controlador de la base de datos.
  • El método getSqlState() devuelve el código SQLSTATE.
  • Puede utilizar los métodos getQueryString() y getParameters() para recuperar la consulta original y sus parámetros.

La clase DriverException se extiende con las siguientes excepciones especializadas:

  • ConnectionException – indica un fallo en la conexión con el servidor de base de datos.
  • ConstraintViolationException – la clase base para violaciones de restricciones de base de datos, de la cual heredan las siguientes excepciones:
    • ForeignKeyConstraintViolationException – violación de una restricción de clave externa.
    • NotNullConstraintViolationException – violación de una restricción NOT NULL.
    • UniqueConstraintViolationException – violación de una restricción de unicidad.

El siguiente ejemplo muestra cómo detectar una UniqueConstraintViolationException, que se produce al intentar insertar un usuario con un correo electrónico que ya existe en la base de datos (suponiendo que la columna email tenga un índice único):

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();
}