peter mueller: wert ausgeben

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;

  1. 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

    1. 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

      1. 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

        1. 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

          1. vielen dank für das beispiel. hat bestens funktioniert!

            gruss

            peter