phpbar.de logo

Mailinglisten-Archive

AW: Gleichzeitiger Zugriff auf Mysql im WIN-Netz makes trouble
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

AW: Gleichzeitiger Zugriff auf Mysql im WIN-Netz makes trouble



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


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive