dedlfix: Duplikate vermeiden

Beitrag lesen

Tach!

„Leg einen Unique-Index auf - in deinem Fall - die Personalnummer an und dann einfach ohne Prüfung ein Insert probieren. Wenn die Nummer noch nicht vorhanden war, gibts ein OK und wenn doch, wird ein Fehler erzeugt. Den musst du auswerten, ob es ein Unique-Constraint-Error ist und weißt dann, dass die Nummer schon eingetragen war.“

Das mit dem Unique Key habe ich auch schon versucht. Es hat den Eintrag nicht gespeichert, aber ich habe keine Fehlermeldung herbekommen.
Wie mache ich das?

Definiere "keine Fehlermeldung bekommen"! Wenn mysql_query() gelingt, gibt es beim Insert true zurück, ansonsten false. Es wäre das erste, konkret nachzusehen was man für ein Ergebnis bekommt. Oder du schreibst deinen Code so, dass er diese beiden Zustände in einem if-else behandelt. Auch hier kann man prüfen, was das Ergebnis war, indem man mal zur Kontrolle je eine Ausgabe in die beiden Zweige schreibt.

Der nächste Punkt ist, wie man nun an die konkrete Fehlermeldung kommt. Dazu gibt es die Funktionen mysql_error() und mysql_errno(). Sie sind im Handbuch beschrieben. Schau dir besonders mysql_errno() an, denn die Fehlernummer ist eindeutig auswertbar. Wenn du nun herausgefunden hast, welche Nummer bei doppelten Schlüsseln kommt, erstellst du ein weiteres if-else mit dieser Nummer. Kommen anderen Nummern, liegt ein anderer Fehler vor.

Und außerdem: Wenn du im Handbuch nach den erwähnten mysql-Funktionen schaust, wird dich eine große rote Warnung anschreien, dass diese Funktionen veraltet sind. Steig lieber gleich bei Neuentwicklung auf die ebenfalls dort genannten Nachfolger um, sparst du dir später das Umbauen. Am Prinzip der Lösung ändert sich nichts, nur der Code muss geringfügig anders geschrieben werden.

dedlfix.