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() y getParameters() 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 datos
  • ConstraintViolationException – clase base para violaciones de restricciones de la base de datos, de la cual heredan:
    • ForeignKeyConstraintViolationException – violación de clave foránea
    • NotNullConstraintViolationException – violación de restricción NOT NULL
    • UniqueConstraintViolationException – 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();
}
versión: 4.0