У меня есть таблица MySQL, в которой есть поле для адресов электронной почты, которое определено как уникальное. В этом примере предположим, что вся моя форма позволяет пользователю вставлять свой адрес электронной почты в таблицу.проверить наличие дубликатов и использовать результат PDO errorInfo
Поскольку поле электронной почты уникально, запрос должен быть неудачным, если он пытается дважды ввести один и тот же адрес электронной почты. Мне интересно, какие компромиссы между двумя сценариями:
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 позаботился о проверке данных для вас».
EDIT - Обратите внимание, что это не вопрос «Как это сделать», а вопрос «Почему я должен делать это конкретным образом». Небольшой фрагмент кода, который я включил в работу, но то, что мне интересно, - лучший способ решить проблему.
Вы думаете об использовании 'Exception'? – Leri
В каких отношениях? Конечно, я обрабатываю исключения, но если я не пропущу что-то, обработка исключений выходит за рамки моего вопроса. – JoshBramlett