PHP: mysql duplikatsprüfung



  • Hallo,

    ich bearbeite momentan eine mysql datenbank mittels PHP. Ich würd gern wissen ob es mittels SQL möglich ist eine duplikatsprüfung zu machen, dh. bevor der wert geschrieben wird, wenn ja wie?

    mfg



  • Es kommt ja auf das Konzept an. Wenn du keine doppelten Werte erlauben willst, setzt du auf das Feld einen unique-Index; dann verweigert der SQL-Server im Falle eines doppelten Eintrages einfach den Request.

    Ansonsten musst du halt vorher prüfen, ob ein solcher Wert schon existiert (SELECT .... WHERE Spalte = 'Wert, den es nicht doppelt geben darf'). Wenn du dabei ein Ergebnis bekommst, weißt du, dass es den Wert schon gibt.

    Andere Möglichkeiten würden mir so ohne weiteres nicht einfallen ...



  • hm, naja die felder dürfen sowoeso nie doppelt auftreten also würde das mit dem unique ja gut passen.

    da müßt ich nur mal schaun was php dann als verwertbare fehlermeldung ausgibt.



  • 00Albert schrieb:

    da müßt ich nur mal schaun was php dann als verwertbare fehlermeldung ausgibt.

    dafür gibts mysql_errno() und mysql_error()



  • Wobei ich die Variante als "unschön" empfinde.

    Wenn ein unique-Index vergeben wird, dann, weil man nicht erwartet, dass doppelte Einträge entstehen. Dass nun aber als Fehlerprüfung zu benutzen, halte ich für stilistisch mies. Da du nun eine Prüfung in PHP sowieso implementieren musst - und sei es nur, um auf den versuch, einen doppelten Eintrag zu erstellen, zu reagieren -, kannst du auch gleich eine Routine einbauen, die schon vorher sicherstellt, dass der Eintrag nicht doppelt existiert. Der unique-Index wäre dann nur noch dazu da, im Falle des Falles die Datenintegrität dennoch intakt zu halten.

    Wie gesagt, halte ich für schlicht für "sauberer" ...



  • ich halte den weg für guten stil.
    lass die datenbank tun, was ihre aufgabe ist. die gleiche aufgabe nochmal in php zu verpacken, provoziert doch nur fehler, wenn mal mal was ändert.



  • Naja, ich bin der Meinung, eine gute Software erzeugt keine Fehler, auf die sie reagieren muss, sondern vermeidet Fehler, auf die sie aber im Notfall dennoch reagieren kann ...



  • Reyx schrieb:

    Naja, ich bin der Meinung, eine gute Software erzeugt keine Fehler, auf die sie reagieren muss, sondern vermeidet Fehler, auf die sie aber im Notfall dennoch reagieren kann ...

    in diesem sinne ist es kein fehler, wenn die datenbank nix schreibt. man bittet die datenbank höflichst, "schau mal, ob der datensatz neu ist und wenn ja, schreib ihn rein, wenn nein, schreibe nichts und sage bescheid".



  • Ausserdem ist das nicht zwingend ein Programm Fehler.
    Wenn man zum beispiel eine usereingabe abspeichern will, die einzigartig sein soll (Username Beispielsweise), dann ist das mit dem unique doch die beste methode die es gibt.

    Ich vermute das mit den Fehlermeldungen war darauf bezogen, das er eine vernünftige Fehlermeldung an einen User ausgeben kann.
    Würde zumindest Sinn machen 😃



  • INSERT IGNORE

    ist dein freund. Da gibt es keine Fehler wenn doppelt.



  • mysqluser schrieb:

    INSERT IGNORE

    ist dein freund. Da gibt es keine Fehler wenn doppelt.

    Das PHP-Skript sollte aber schon wissen, ob die Werte eingefügt worden sind, oder nicht. In den meisten Fällen weicht die abschließende Bearbeitung des Skriptes doch elementar davon ab, ob die Aktion erfolgreich war!


Anmelden zum Antworten