Dado que o modo de erro mais recomendado para PDO é ERRMODE_EXCEPTION
, nenhuma execute()
verificação de resultado direto funcionará . Pois a execução do código nem atingirá a condição oferecida nas outras respostas.
Portanto, existem três cenários possíveis para lidar com o resultado da execução da consulta no PDO:
- Para saber o sucesso, nenhuma verificação é necessária. Apenas continue com o fluxo do programa.
- Para lidar com o erro inesperado, continue com o mesmo - nenhum código de tratamento imediato é necessário. Uma exceção será lançada no caso de um erro de banco de dados e aparecerá no manipulador de erros de todo o site que eventualmente resultará em uma página de erro 500 comum.
- Para lidar com o erro esperado, como uma chave primária duplicada, e se você tiver um determinado cenário para lidar com esse erro específico, use um
try..catch
operador.
Para um usuário normal de PHP, parece um pouco estranho - que tal não verificar o resultado direto da operação? - mas é exatamente assim que as exceções funcionam - você verifica o erro em outro lugar. De uma vez por todas. Extremamente conveniente.
Então, em poucas palavras: em um código normal, você não precisa de nenhum tratamento de erros. Basta manter seu código como está:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
Em caso de sucesso, ele dirá a você, em caso de erro, ele mostrará a página de erro normal que seu aplicativo está mostrando para tal ocasião.
Apenas no caso de você ter um cenário de tratamento diferente de apenas relatar o erro, coloque sua instrução insert em um try..catch
operador, verifique se foi o erro que você esperava e trate-o; ou - se o erro for diferente - relançar a exceção, para possibilitar que seja tratada pela maneira usual de tratamento de erros em todo o site. Abaixo está o código de exemplo do meu artigo sobre tratamento de erros com PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
No código acima, estamos verificando o erro específico para realizar alguma ação e lançando novamente a exceção para qualquer outro erro (nenhuma tabela, por exemplo) que será relatado a um programador.
Mais uma vez - apenas para dizer ao usuário algo como "Sua inserção foi bem-sucedida", nenhuma condição é necessária.