Auf doppelten Eintrag prüfen oder PDO-errorInfo-Ergebnis verwenden

Ich habe eine MySQL-Tabelle, die ein Feld für E-Mail-Adressen enthält, das als eindeutig definiert ist. Nehmen wir für dieses Beispiel an, mein Formular lässt nur zu, dass ein Benutzer seine E-Mail-Adresse in die Tabelle einfügt.

Da das E-Mail-Feld eindeutig ist, sollte die Abfrage fehlschlagen, wenn versucht wird, dieselbe E-Mail zweimal einzugeben. Ich bin gespannt auf die Kompromisse zwischen den beiden Szenarien:

1) Führen Sie eine schnelleSELECT Anweisung vor dem Einfügen. Wenn die Auswahl Ergebnisse zurückgibt, informieren Sie den Benutzer und führen Sie die nicht ausINSERT Aussage.

2) Führen Sie dieINSERT Anweisung, und überprüfen Sie auf einen doppelten Eingabefehler

// 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.';
    }
}

Nehmen Sie auch die normale Verwendung an, dh doppelte Einträge sollten minimal sein. Daher haben Sie im ersten Szenario offensichtlich den Overhead, eine zusätzliche Abfrage für auszuführenjeden einfügen, während Sie in der Sekunde auf Fehlerbehandlung verlassen.

Außerdem bin ich neugierig, Gedanken über den Codierungsstil zu hören. Mein Herz sagt 'Sei ein defensiver Programmierer! Überprüfen Sie die Daten, bevor Sie sie einfügen! ' Während mein Gehirn sagt: "Hmmm, vielleicht ist es besser, MySQL sich darum zu kümmern, die Daten für Sie zu überprüfen."

BEARBEITEN - Bitte beachten Sie, dass dies keine Frage zum "Wie mache ich das?" Ist, sondern eine Frage zum "Warum soll ich das auf eine bestimmte Weise machen?". Das kleine Code-Snippet, das ich mitgeliefert habe, funktioniert, aber was mich interessiert, ist der beste Weg, um das Problem zu lösen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage