sprawdź duplikat wpisu vs użyj wyniku PDO errorInfo
Mam tabelę MySQL, która ma pole dla adresów e-mail, które jest zdefiniowane jako unikalne. W tym przykładzie powiedzmy, że wszystkie moje formularze umożliwiają użytkownikowi wstawienie ich adresu e-mail do tabeli.
Ponieważ pole e-mail jest unikalne, zapytanie powinno się nie powieść, jeśli spróbują wprowadzić ten sam e-mail dwukrotnie. Jestem ciekawy kompromisów między dwoma scenariuszami:
1) Uruchom szybkoSELECT
oświadczenie przed wykonaniem wkładki. Jeśli zaznaczenie zwróci wyniki, poinformuj o tym użytkownika i nie uruchamiajINSERT
komunikat.
2) UruchomINSERT
i sprawdź, czy nie ma duplikatu błędu wejścia
// 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.';
}
}
Przyjmij także normalne użycie, co oznacza, że zduplikowane wpisy powinny być minimalne. Dlatego w pierwszym scenariuszu masz oczywiście koszty związane z uruchomieniem dodatkowego zapytania dlakażdy wstaw, podczas gdy w drugiej polegasz na obsłudze błędów.
Ponadto, jestem ciekawy, co myśli o stylu kodowania. Moje serce mówi: „Bądź programistą obronnym! Sprawdź dane przed włożeniem! podczas gdy mój mózg mówi „Hmmm, może lepiej pozwolić MySQL-owi na sprawdzenie danych dla ciebie”.
EDYTOWAĆ - Pamiętaj, że nie jest to pytanie „Jak to zrobić”, ale pytanie „Dlaczego mam to zrobić w określony sposób”. Mały fragment kodu, który zawarłem, działa, ale to, co mnie interesuje, to najlepszy sposób na rozwiązanie problemu.