verifique se há entrada duplicada vs use o resultado errorInfo do PDO
Eu tenho uma tabela MySQL que tem um campo para endereços de email que é definido como único. Para este exemplo, digamos que tudo que meu formulário faz é permitir que um usuário insira seu endereço de e-mail na tabela.
Como o campo de e-mail é exclusivo, a consulta deve falhar se tentar inserir o mesmo e-mail duas vezes. Estou curioso sobre os trade-offs entre os dois cenários:
1) Execute um rápidoSELECT
declaração antes de executar a inserção. Se a seleção retornar resultados, informe o usuário e não execute oINSERT
declaração.
2) Execute oINSERT
instrução e verifique se há um erro de entrada duplicado
// snippet uses PDO
if (!$prep->execute($values))
{
$err = $prep->errorInfo();
if (isset($err[1]))
{
// 1062 - Duplicate entry
if ($err[1] == 1062)
echo 'This email already exists.';
}
}
Além disso, por favor, assuma o uso normal, o que significa que as entradas duplicadas devem ser mínimas. Portanto, no primeiro cenário, você obviamente tem a sobrecarga de executar uma consulta adicional paracada inserir, enquanto no segundo você está contando com o tratamento de erros.
Além disso, estou curioso para ouvir pensamentos sobre estilo de codificação. Meu coração diz: 'Seja um programador defensivo! Verifique os dados antes de inserir! enquanto meu cérebro diz "Hmmm, talvez seja melhor deixar o MySQL cuidar de verificar os dados para você".
EDITAR - Por favor, note que esta não é uma pergunta "Como faço isso", mas sim uma pergunta "Por que devo fazer isso de uma forma específica". O pequeno trecho de código que eu incluí funciona, mas o que eu estou curioso é a melhor maneira de resolver o problema.