Mailinglisten-Archive |
Hi Freunde, > Wie ich dir schon mal in Worten beschrieben habe, solltest > du überprüfen ob die Locks gesetzt sind. > > $lock = "LOCK TABLES user WRITE offer READ"; > > scheint mir da nicht ganz das passende zu sein. Wieso ? steht doch so im manual ... warum stehts da, wenns nicht funzt? um mich zu verwirren ? um mich zu ärgern ? hmmm... > Im Manual gibts noch: > > GET_LOCK(str,timeout) > RELEASE_LOCK(str) yo,gelesen, aber irgendwie versteh ich nicht, was für ein string ich übergeben soll. Welchen Bezug hat der String? manual sagt: "It blocks requests by other clients for locks with the same name; " aja, also gebe ich einfach den Locks irgendeinen Namen ...,aj? > Ich denke mal daß dein Problem auch daraus resultiert: nö - oder doch --- > - Du änderst die Tabelle über ein HTML - Formular. > - Du lockst die Tabelle beim lesen der Werte, unlock >- Du lockst die Tabelle beim schreiben der Werte. unlock ja, so ist der ablauf. > > Zwischen beidem ist die Tabelle nicht gelockt (geht ei- > gentlich auch nicht). genau. > Abhilfe geht ungefähr so (So mach ich das :) ne. leider nicht. Das merkwürdige ist ja, das die Überprüfungsroutine einfach ausgehebelt wird. Nochmals (ich habe es jetzt in 4 Dateien aufgesplittet): 1. Datei: Forumlar, in das Daten eingetragen wird. Submit--> 2. Datei: Daten kommen an. Select auf 4 Datenrows, die 4 werden ausgelesen ---> Überprüfung auf doppelten Eintrag mit den 4 ausgewählten Daten aus Formular --ja, schon da--> -- Datei 3: Leider schon eingetragen --nein, nicht vorhanden--> -- Datei 4: schreiben der Daten in die DB, "Erfolgreich eingetragen"-Print, Email an Eintragenden. Fertig. Wenn ich alleine am Rechner sitze, und kein anderer auf die Datei(en) zugreift funzt alles. Sobald zwei User (ungefähr) gleichzeitig auf die Datei(en) zugreifen, wird alles, was in Datei 2 passiert anscheinend ausgehebelt. Es scheint keine Überprüfung mehr stattzufinden, da der User mit identischen daten einfach nochmals eingetragen wird. So weit so blöd. Da das so passiert bleiben zwei Möglichkeiten: 1. Zwei User greifen (ungefähr) gleichzeitig auf die SELECT-Anweisung zu,was die DB verwirrt, und keiner der User den SELECT erfolgreich vollführt. Keine Daten ---> ?? Dann dürfte er eigentlich nicht reinschreiben, da "keine Daten" nicht gleich den FormularDaten sind, und somit die Überprüfungsroutine den User zurückgehen lassen würde. ---> kein Eintrag. Komisch ist jedoch, das der User entweder auf das Formular zurückgeworfen wird, oder den "Erfolg-Screen" bekommt. Nicht jedoch den "Leider schon eingetragen-Screen". 2. Zwei User greifen (ungefähr) zeitgleich auf die INSERT INTO- Anweisung zu. Aber da kommt der User doch gar nicht hin, weil er nicht erfolgreich valdiert werden konnte .... tsts. irgendwie übersteigt das meinen Horizont. Gibts ne dritte Möglichkeit, die ich vielleicht vergessen habe? langsam echt am verzweifeln, -Armin --- *** Abmelden von dieser Mailingliste funktioniert per E-Mail *** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive