wert ausgeben
peter mueller
- php
hallo
bei der verwendung von get_lock bekomme ich als ausgabe immer Resource id #2 und nicht 1 oder 0.
was muss ich ändern, damit es funktioniert?
gruss
peter
$sql = 'select get_lock("5007",1)';
$res = mysql_query($sql);
echo $res;
Hi!
bei der verwendung von get_lock bekomme ich als ausgabe immer Resource id #2 und nicht 1 oder 0.
was muss ich ändern, damit es funktioniert?
Wieso sollte 0 oder 1 ausgegeben werden? Gucke im Manual nach was mysql_query() für einen Rückgabewert hat: http://de3.php.net/manual/de/function.mysql-query.php
Unter http://de3.php.net/manual/de/language.types.php ist beschrieben was das ist.
$sql = 'select get_lock("5007",1)';
$res = mysql_query($sql);
echo $res;
Was genau willst Du da ausgeben? Gucke unter http://de3.php.net/manual/de/ref.mysql.php nach wie genau man das Ergebnis einer Abfrage anzeigt.
Grüße
Andreas
unter http://www.mysql.de/doc/de/Miscellaneous_functions.html
steht dass man folgende werte erhalten soll.
mysql> select GET_LOCK("lock1",10);
-> 1
mysql> select GET_LOCK("lock2",10);
-> 1
mysql> select RELEASE_LOCK("lock2");
-> 1
mysql> select RELEASE_LOCK("lock1");
-> NULL
deshalb wollte ich wissen, weshalb ich nicht 1 oder 0 erhalte.
gruss
peter
Hi!
mysql> select GET_LOCK("lock2",10);
ist was anderes als
mysql_query('select get_lock("5007",1)');
Obiges ist der Kommandozeilenclient von MySQL, unten ist es eine PHP-Funktion die ausgeführt wird. Diese Funktion liefert selber kein Ergebnis, sondern wie Du sicher gelesen hast die Recource unter der das Ergebnis geholt werden kann. Sehe Dir die mysql_fetch_* Funktionen an, komisch dass Du ausgerechnet das überlesen hast?!
Grüße
Andreas
Hi Andreas, hi Peter,
mysql> select GET_LOCK("lock2",10);
ist was anderes als
mysql_query('select get_lock("5007",1)');
Obiges ist der Kommandozeilenclient von MySQL, unten ist es eine PHP-Funktion die ausgeführt wird. Diese Funktion liefert selber kein Ergebnis, sondern wie Du sicher gelesen hast die Recource unter der das Ergebnis geholt werden kann. Sehe Dir die mysql_fetch_* Funktionen an, komisch dass Du ausgerechnet das überlesen hast?!
Das ist sicher meine Schuld gewesen gestern. Ich habe Peter nur einen halben Tipp gegeben und ihn nicht selbst ausprobiert. Dann wäre mir nämlich mein Fehler aufgefallen. Tut mir leid, Peter.
Also nochmal pseudocode
function checked_insert($data,$table,$con)
$res = select get_lock("insert",10);
if (!$res) return ....Datenbankfehler
$ins_OK = mysql_fetch_row($res);
if (!ins_OK[0]==1) return ... Pech gehabt, komm später wieder
...
Einfügeoperationen
Selects
Berechnungen
Updateoperationen
...
$res = select release_lock("insert",10);
if (!$res) return ....ganz schwerer Datenbankfehler bei Freigabe
$release_OK = mysql_fetch_row($res);
if (!release_OK[0]) return ... Fehlercode wg. Freigabefehler
Ende -----
Du solltest Dir für bestimmte Operationen verschiedene Lock-Klassen überlegen. Eine einfache Einfügeoperation in eine einzige alleinstehende Tabelle kann dann z.B. nur eine einzige Lockklasse ansprechen, während eine komplexere Update-Funktion mehrere Locks benutzt. Nur wenn alle Locks erfolgreich sind, kann die Änderung durchgeführt werden. Man darf nur auf keinen Fall vergessen, de Locks wieder freizugeben.
Ich hoffe, nun klappts.
Ich habe auf jeden Fall seleber noch mal ne Anregung draus gezogen aus unserem Trilog
Grüße
Tom
vielen dank für das beispiel. hat bestens funktioniert!
gruss
peter