doppelte SQL-Abfrage 100%-tig verhindern - Gewinnspiel

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

@ mgutt, ach Du willst dem user gleich anzeigen, ob er gewonnen hat. Das ist bei einem "der Erste gewinnt" Spiel natürlich sinnvoll.

Ob man sich auf das mysql_insert_id() verlassen kann, wenn direkt nacheinander zwei inserts erfolgt sind weiß ich nicht. Ein erneutes select und der Vergleich der user_id im ersten Eintrag mit der id des users ist auf jeden Fall sicher. Und da es zu der Abfrage, wenn überhaupt, nur bei den ersten (fast) gleichzeitigen Anfragen kommt braucht man sich auch nicht allzuviel Gedanken über die Performance machen.

Den timestamp würde ich raus lassen, der ist unnötig und er könnte identisch mehrfach vorkommen.
Beachten Sie, dass mysql_insert_id() den Wert 0 liefert, wenn die Anweisung keinen AUTO_INCREMENT-Wert verwendet. Wenn Sie den Wert zur späteren Benutzung speichern möchten, müssen Sie unmittelbar nach der Anweisung, die den Wert generiert, mysql_insert_id() aufrufen.
http://dev.mysql.com/doc/refman/5.1/de/ ... rt-id.html
Wenn mysql_insert_id() seine Information aus der Rückmeldung der letzten Abfrage bezieht, dürfte es sicher sein, wenn es seine Information aber aus der Datenbank holt, könnte es eventuell schon die nächste id sein. Du kannst mal schauen wie phpbb das macht.
mgutt hat geschrieben:Die user_id muss ich haben. Die brauche ich für die Gewinnerliste. Sonst weiß ich ja gar nicht wer gewonnen hat.
Er meint doch nur wenn man statt dem zweiten select das mysql_insert_id() nutzt. Die user_id steht da schon in der Tabelle.
Antworten

Zurück zu „Coding & Technik“