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.

questionAnswers(3)

yourAnswerToTheQuestion