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