У меня есть таблица 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.';
}
}
Кроме того, предположите, что это нормальное использование, что означает, что дублирующие записи должны быть минимальными. Поэтому в первом сценарии у вас, очевидно, есть накладные расходы на выполнение дополнительного запроса для каждой вставки, тогда как во втором вы полагаетесь на обработку ошибок.
Кроме того, мне любопытно слышать мысли о стиле кодирования. Мое сердце говорит: "Будь защитником! Проверьте данные перед вставкой! ' в то время как мой мозг говорит:" Хм, может быть, лучше позволить MySQL позаботиться о проверке данных для вас".
РЕДАКТИРОВАТЬ. Обратите внимание, что это не вопрос "Как это сделать", а вопрос "Почему я должен делать это конкретным образом". Небольшой фрагмент кода, который я включил в работу, но то, что мне интересно, - лучший способ решить проблему.