Mailinglisten-Archive |
Hallo, > ---------- > Von: Armin Steiner[SMTP:steiner_(at)_dynamic-webpages.de] > > schade nur, das es nicht funktioniert. Doppelte Einträge sind immer > noch möglich .... grmble. > > Wo liegt der Fehler ? Oder wird der LOCK auf Windows nicht > unterstützt ? > Steht nix im Manual drin - außer dass die Locks bestehen bleiben, wenn der Client wegbricht. > Was geben $getlock und $getunlock eigentlich zurück ? (bzw. > was sollten sie bei Erfolg/Misserfolg zurückgeben?). Ich habe das > mal mit "echo $getlock" und "echo $getunlock" geprüft, $getlock gab > nichts zurück, $getunlock gab 1 zurück ? Könnte mir das helfen ? > Normalerweise sollten beide Funktionen einen Wert !=0 zurückgeben, falls erfolgreich. Meist ist das die 1. 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. Im Manual gibts noch: GET_LOCK(str,timeout) Tries to obtain a lock with a name given by the string str, with a timeout of timeout seconds. Returns 1 if the lock was obtained successfully, 0 if the attempt timed out, or NULL if an error occurred (such as running out of memory or the thread was killed with mysqladmin kill). A lock is released when you execute RELEASE_LOCK(), execute a new GET_LOCK() or the thread terminates. This function can be used to implement application locks or to simulate record locks. It blocks requests by other clients for locks with the same name; clients that agree on a given lock string name can use the string to perform cooperative advisory locking. RELEASE_LOCK(str) Releases the lock named by the string str that was obtained with GET_LOCK(). Returns 1 if the lock was released, 0 if the lock wasn't locked by this thread (in which case the lock is not released) and NULL if the named lock didn't exist. The lock will not exist if it was never obtained by a call to GET_LOCK() or if it already has been released. Ich denke mal daß dein Problem auch daraus resultiert: - Du änderst die Tabelle über ein HTML - Formular. - Du lockst die Tabelle beim lesen der Werte, - du lockst die Tabelle beim schreiben der Werte. Zwischen beidem ist die Tabelle nicht gelockt (geht ei- gentlich auch nicht). Abhilfe geht ungefähr so (So mach ich das :) Tabelle habe 2 Spalten mit den Bezeichnungen p_key und und name. lesen.phtml: 1) Lies alle Werte dieses Datensatzes aus der Datenbank aus. 3) Schreibe alle Werte als versteckte Formularfelder in das Formular und stelle dem Formularfeldnamen etwas eindeutiges voran, z.B.: <input type="hidden" name="Xp_key" value="5"> <input type="hidden" name="Xname" value="meier"> 2) Biete die Werte, die geaendert werden sollen, in Formular- feldern an - mit Vorbelegung durch das was du gelesen hast. z.B. <input type="text" name="name" value="meier"> schreiben.phtml: 1) Locke die Tabelle zum schreiben. 2) Lese den Datensatz noch einmal aus der Tabelle. 3) Vergleiche ob alle Werte in dem Datensatz denen entsprechen, die du als Xname und Xp_key hast. 4) Wenn sie NICHT identisch sind, hat jemand in der Zwischenzeit schon den Datensatz veraendert --> Abbrechen !!! 5) Falls identisch: Schreibe die geaenderten Werte in den Daten- satz. 6) Lock lösen Alternativ kannst du in Jede Tabelle ein TIMESTAMP-Feld schreiben, dessen Inhalt versteckt mittransportiert wird, und das bei jedem Update aktualisiert wird (einfach NULL reinschreiben --> akt. Time- stamp). So sollte sich das Chaos vermeiden lassen :) Viele Grüße, Mathias --- *** 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