проверить наличие дублирующихся записей и использовать результат 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 - Обратите внимание, что это не так. Как мне это сделать? вопрос, а скорее «Почему я должен делать это особым образом» вопрос. Небольшой фрагмент кода, который я включил, работает, но то, что мне интересно, - лучший способ решить проблему.