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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?