Exceções
O Nette Database usa uma hierarquia de exceções. A classe base é Nette\Database\DriverException
, que estende
PDOException
e fornece funcionalidade aprimorada para trabalhar com erros de banco de dados:
- O método
getDriverCode()
retorna o código de erro do driver do banco de dados. - O método
getSqlState()
retorna o código SQLSTATE. - Você pode usar os métodos
getQueryString()
egetParameters()
para recuperar a consulta original e seus parâmetros.
A classe DriverException
é estendida pelas seguintes exceções especializadas:
ConnectionException
– indica uma falha na conexão com o servidor de banco de dados.ConstraintViolationException
– a classe base para violações de restrições de banco de dados, da qual as seguintes exceções são herdadas:ForeignKeyConstraintViolationException
– violação de uma restrição de chave estrangeira.NotNullConstraintViolationException
– violação de uma restrição NOT NULL.UniqueConstraintViolationException
– violação de uma restrição de exclusividade.
O exemplo a seguir demonstra como capturar um UniqueConstraintViolationException
, que ocorre quando se tenta
inserir um usuário com um e-mail que já existe no banco de dados (supondo que a coluna email
tenha um índice
exclusivo):
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();
}