проверить наличие дублирующихся записей и использовать результат PDO errorInfo

У меня есть таблица MySQL, в которой есть поле для адресов электронной почты, которое определено как уникальное. В этом примере предположим, что все, что делает моя форма, - это позволяет пользователю вставить свой адрес электронной почты в таблицу.

Поскольку поле электронной почты уникально, запрос должен завершиться неудачей, если они попытаются ввести один и тот же адрес электронной почты дважды. Мне любопытно найти компромисс между двумя сценариями:

1) Беги быстроSELECT заявление перед выполнением вставки. Если функция выбора возвращает результаты, сообщите об этом пользователю и не запускайтеINSERT заявление.

2) ЗапуститеINSERT выписка, и проверьте наличие ошибки ввода

// 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.';
    }
}

Также, пожалуйста, примите во внимание нормальное использование, означающее, что повторяющиеся записи должны быть минимальными. Следовательно, в первом сценарии у вас явно есть накладные расходы на выполнение дополнительного запроса дляevery вставить, тогда как во втором вы полагаетесь на обработку ошибок.

Кроме того, мне любопытно услышать мысли о стиле кодирования. Мое сердце говорит: «Будь защитником! Проверьте данные перед тем, как вставить! & Apos; в то время как мой мозг говорит: «Хммм, может быть, лучше позволить MySQL позаботиться о проверке данных для вас».

EDIT - Обратите внимание, что это не так. Как мне это сделать? вопрос, а скорее «Почему я должен делать это особым образом» вопрос. Небольшой фрагмент кода, который я включил, работает, но то, что мне интересно, - лучший способ решить проблему.

Ответы на вопрос(3)

Ваш ответ на вопрос