Excepciones
Nette Database utiliza una jerarquía de excepciones. La clase base es Nette\Database\DriverException
, que hereda
de PDOException
y proporciona opciones extendidas para trabajar con errores de la base de datos:
- El método
getDriverCode()
devuelve el código de error del driver de la base de datos - El método
getSqlState()
devuelve el código SQLSTATE - Los métodos
getQueryString()
ygetParameters()
permiten obtener la consulta original y sus parámetros
De DriverException
heredan las siguientes excepciones especializadas:
ConnectionException
– señala un fallo de conexión al servidor de base de datosConstraintViolationException
– clase base para violaciones de restricciones de la base de datos, de la cual heredan:ForeignKeyConstraintViolationException
– violación de clave foráneaNotNullConstraintViolationException
– violación de restricción NOT NULLUniqueConstraintViolationException
– violación de unicidad de valor
Ejemplo de captura de excepción UniqueConstraintViolationException
, que ocurre cuando intentamos insertar un
usuario con un correo electrónico que ya existe en la base de datos (asumiendo que la columna email
tiene un índice
único).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'El usuario con este correo electrónico ya existe.';
} catch (Nette\Database\DriverException $e) {
echo 'Ocurrió un error durante el registro: ' . $e->getMessage();
}