3
respostas

Exception de banco de dados?

Como tratar erros especificos de banco de dados, como chave duplicada, problema de chave estrangeira, etc.... ? Quando uso PDO o tratamento de exceção deve ser diferente?

3 respostas

Olá, Tiago.

O PDO tem uma Exception que pode ser lançada em todos os erros de banco: PDOException

Para que ele lance essa exceção sempre, basta fazer, ao instanciá-lo:

<?php

$conexao = new \PDO(...);
$conexao->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

Por padrão o PDO está configurado para não lançar exceções (PDO :: ERRMODE_SILENT). Para você poder habilitar que ele lance, use o método setAttribute passando o nome do atributo e o nome do modo que ele será registrado.

Documentação do PHP: https://php.net/manual/pt_BR/pdo.setattribute.php

No seu caso, é desta forma:

 $conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

As exceções que são lançadas pelo PDO é PDOException

Para tratar as exceções do PDOException:


try 
{
    #Código.
}
catch (PDOException $e)
{
    #Tratar exceção.
}

Caso eu queira tratar um erro especifico de banco de dados como chave duplicada, como deveria fazer o tratamento para dar uma mensagem melhor para o usuário?