[php/mysql] Doppelte Buchungen verhindern...

27o8

abgemeldet
2 Mai 2006
9.028
933
Ich hab ein ganz seltsames Problem was ich mir nicht erklären kann... ein Script läuft alle x Minuten und vergütet alle Aktionen wo der Status 0 ist, schreibt einen Eintrag in die Buchungsliste und setzt den Status auf 1. Das ganze funktioniert auch, aber manchmal wird das ganze doppelt vergütet :roll:.

Habe dann noch was eingebaut wo vor jeder Vergütung zusätzlich nochmal die Datenbank durchsucht wird, sofern dazu schon eine Buchung vorhanden ist wird der aktuelle Datensatz einfach übersprungen mit continue;

Dachte eigentlich das würde funktionieren, aber es geht einfach nicht:!:
Langsam gehen mir die Ideen aus oO
 
Versuch nicht, das Problem zu umgehen, sondern löse das Problem ;)

Doppelte Einträge? Wer trägt alles ein? Geh mit der Suchfunktion drüber und such alle INSERT INTO-Statements auf die Tabelle. Wer startet die Scripte? Guck nach, ob einer das Script doppelt starten könnte.
Ggf. hilft Locking der Tabellen, um Race Conditions zu vermieden.
 
Es gibt nur eine Datei welche vergütet und dort auch nur innerhalb der IF Abfrage und auch nur, wenn status=0 direkt nach der Vergütung wird der Status auf 1 gesetzt. Diese Datei wird auch nur per Cronjob (über Confixx) aufgerufen.

Doch selbst wenn das 2x aufgerufen würde müsste doch bei Aufruf #2 der Status auf 1 sein und somit nicht vergütet werden.

Ggf. hilft Locking der Tabellen, um Race Conditions zu vermieden.
Muss ich zugeben hab ich noch nie gebraucht, und mich darüber noch nicht informiert. :oops: Habe das nun mal schnell überflogen und wüsste nicht wie ich das einsetzen sollte :-?. Werde ich später nochmal lesen.
 
Du musst deine SQL Statements zusammen in eine Transaktion packen, damit zwischen ihnen nicht unterbrochen werden kann.
 
Du musst deine SQL Statements zusammen in eine Transaktion packen, damit zwischen ihnen nicht unterbrochen werden kann.
Fehlt mir jetzt wirklich die entscheidene Idee wo ich das machen sollte :think: da kann man schwer was zusammenfassen. Kann ich dir mal die Datei zuschicken und du schaust sie dir mal an? :-?