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.

questionAnswers(3)

yourAnswerToTheQuestion