PaSt: SQL-Anweisung schlägt mit mysqli::multi_query() fehl

guten abend

Ich habe ein Problem mit einer, für meine Begriffe etwas komplexere, sql-Anweisung. Wenn ich sie mit mysqli::multi_query() werden falsche Werte eingetragen und updates nicht richtig ausgeführt. Wenn ich aber dieselbe Anweisung über php-myAdmin ausführe dann klappt alles. Daraus schliesse ich, dass die Anweisung stimmt.
Meiner Meinung nach sollte es doch keinen Unterschied machen ob ich nun die Anweisung mit muli_query oder direkt ausführe.

Jetzt meine Frage weiss jemand woran das liegen kann? Hat das etwas mit der mysqli::multi_query() zu tun?
wie kann ich das beheben

  
    $sql = sprintf("UPDATE %s SET lft = lft-%s, rgt = rgt-%s, updated = 1  
        WHERE lft >=%s AND rgt <=%s AND updated = 0;  
        UPDATE %s SET lft = lft+%s, rgt = rgt+%s, updated = 1  
        WHERE lft < %s AND updated = 0;  
        UPDATE guestbook SET updated = 0;  
  
        UPDATE %s SET rgt=rgt+2 WHERE rgt >= %s;  
        UPDATE %s SET lft=lft+2 WHERE lft > %s;  
        INSERT INTO %s (Titel, Eintrag, Autor, lft, rgt) VALUES ('%s', '%s', '%s', %s, %s)",  
        $this->dbGuestbook,  
        $offset_lft,  
        $offset_lft,  
        $row['max_lft'],  
        $row['max_rgt'],  
        $this->dbGuestbook,  
        $offset_rgt,  
        $offset_rgt,  
        $row['max_lft'],  
  
        $this->dbGuestbook,  
        $row['rgt']-$offset_lft,  
        $this->dbGuestbook,  
        $row['rgt']-$offset_lft,  
        $this->dbGuestbook,  
        $Titel,  
        $Eintrag,  
        $Autor,  
        ($row['rgt']-$offset_lft),  
        ($row['rgt']-$offset_lft+1)  
        );  
    $this->db_connect();  
    $result = $this->mysqli->multi_query($sql);  
    print_r($sql);  

Ich verwende:
Apache/2.2.10 (Win32) PHP/5.2.6
MySQL-Client-Version: 5.0.51a

im Voraus besten Dank

  1. Hello,

    Jetzt meine Frage weiss jemand woran das liegen kann? Hat das etwas mit der mysqli::multi_query() zu tun?

    vielleicht gibst du erstmal das _wirkliche_ Statement aus und schaust nach, ob damit alles in Ordnung ist, lässt uns nachschauen, ob damit alles in Ordnung ist. Gibt es Fehlermeldungen seitens der Datenbank?

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    There's no such thing as a free lunch  --  Milton Friedman
    1. tach

      vielleicht gibst du erstmal das _wirkliche_ Statement aus und schaust nach, ob damit alles in Ordnung ist, lässt uns nachschauen, ob damit alles in Ordnung ist. Gibt es Fehlermeldungen seitens der Datenbank?

      das tue ich mit ja print_r($sql);
      nach dem mysqli::multy_query() setze die Datenbank zurück (da die Eingaben ja fehlerhaft sind) und führe die mit print_r($sql) ausgebene Anweisung in phpMyAdmin aus (Copy&Paste) und siehe da es klappt alles so wie es sein soll keine Fehlermeldungen oder dergleichen.

      Das ist es ja was mich so irritiert. Dieselbe Anweisung klappt in phpMyAdmin aber nicht mit mysqli::multi_query()

      MfG
      Rouven

      gruss

      1. echo $begrüßung;

        Eine Kleinigkeit:

        das [Kontrollausgabe des Statements] tue ich mit ja print_r($sql);

        print_r() ist für die Ausgabe komplexer Strukturen (Arrays, Objekte) gedacht. Skalare Werte lasen sich damit zwar auch ausgeben, aber print() und echo sind einfacher zu notieren und für deinen Fall völlig ausreichend.

        echo "$verabschiedung $name";

  2. Moin!

    Jetzt meine Frage weiss jemand woran das liegen kann? Hat das etwas mit der mysqli::multi_query() zu tun?

    Ich kann nirgends sehen, dass du die Besonderheiten im Umgang mit Mehrfachergebnissen bei multi_query beachtest. multi_query kann man nicht einfach als Ersatz zu query verwenden, sondern muss jedes einzelne darin enthaltene Statement separat im Ergebnis abhandeln.

    Beispiele dazu stehen in der Handbuchseite.

    $this->db_connect();

    $result = $this->mysqli->multi_query($sql);
        print_r($sql);

      
     - Sven Rautenberg
    
    1. nabend

      multi_query kann man nicht einfach als Ersatz zu query verwenden, sondern muss jedes einzelne darin enthaltene Statement separat im Ergebnis abhandeln.

      Das wars wohl. Vielen Dank. Jetzt scheinen die Statements korrekt ausgeführt zu werden. Muss es aber noch genau überprüfen.

      Ich dachte eben das müsse man nur tun wenn man auf die Resultate zugreifen möchte.

      Beispiele dazu stehen in der Handbuchseite.

      Das nächste mal wohl besser lesen...

      gruss und noch nen schönen Abend

      1. Moin!

        multi_query kann man nicht einfach als Ersatz zu query verwenden, sondern muss jedes einzelne darin enthaltene Statement separat im Ergebnis abhandeln.
        Das wars wohl. Vielen Dank. Jetzt scheinen die Statements korrekt ausgeführt zu werden. Muss es aber noch genau überprüfen.

        Ich dachte eben das müsse man nur tun wenn man auf die Resultate zugreifen möchte.

        Es gibt immer Resultate, die in der Warteschlange stehen und abgeholt werden müssen. Tust du das nicht, stören die Ergebnisse deine nächsten Querys. Auch Befehle, die keine nutzbaren Ergebnisse produzieren, melden sich immer mindestens mit einem "OK gelaufen".

        - Sven Rautenberg