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?
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?
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?