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