Exceções
O Nette Database utiliza uma hierarquia de exceções. A classe base é Nette\Database\DriverException
, que
herda de PDOException
e fornece opções estendidas para trabalhar com erros do 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 - Os métodos
getQueryString()
egetParameters()
permitem obter a consulta original e os seus parâmetros
As seguintes exceções especializadas herdam de DriverException
:
ConnectionException
– sinaliza falha na conexão com o servidor de banco de dadosConstraintViolationException
– classe base para violação de restrições do banco de dados, da qual herdam:ForeignKeyConstraintViolationException
– violação de chave estrangeiraNotNullConstraintViolationException
– violação da restrição NOT NULLUniqueConstraintViolationException
– violação da unicidade do valor
Exemplo de captura da exceção UniqueConstraintViolationException
, que ocorre quando tentamos inserir um
utilizador com um e-mail que já existe no banco de dados (assumindo que a coluna email
tenha um índice único).
try {
$database->query('INSERT INTO users', [
'email' => 'john@example.com',
'name' => 'John Doe',
'password' => $hashedPassword,
]);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
echo 'Um utilizador com este e-mail já existe.';
} catch (Nette\Database\DriverException $e) {
echo 'Ocorreu um erro durante o registo: ' . $e->getMessage();
}