mysqli store_result kaputt??

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysqli store_result kaputt??

    Moin,
    folgende "einfache" Routine (dachte ich) tut nicht wie ich erwarte.
    PHP-Code:
                $sql  "
                SELECT 
                    ord, 
                    access 
                FROM 
                    z_session 
                WHERE 
                    !isnull(sessionid) &&
                    !isnull(access_end) && 
                    access_end < "
    . (time()-600)
                ;
                if (
    $result $this->base_query($sql)){
                    echo 
    "Testausgabe 1<br>result |";var_dump($result);echo "|<br>"/* Testausgabe 1 */
                    
    if ($store $this->store_result()){ /* "$store =" nur zum testen */
                        
    while ($row $result->fetch_assoc()) {
                            
    $sql  
                            UPDATE 
                                z_session 
                            SET 
                                sessionid = NULL 
                            WHERE 
                                ord = "
    .$row['ord']
                            ;    
                            
    $this->base_query($sql);
                            
    $hit->insert_Hit('tag_'.date("z",$row['access']), 'counter_gesamt',date("Y",$row['access']));
                        }
                        
    $this->free_result($result);
                    } 
                    echo 
    "Testausgabe 2<br>store |".$store."| info |".$this->info."| affected_rows |".$this->affected_rows.
                      
    "| errno |".$this->errno."| error |".$this->error."| field_count |".$this->field_count."|<br>"/* Testausgabe  2*/
                

    Was erwarte ich: die erste Abfrage liefert Daten, die nacheinander in der while Schleife entsprechend bearbeitet werden sollen. Doch leider: store_result liefert nichts (entspricht FALSE), die while Schleife wird nie durchlaufen.
    Die Testausgaben:
    PHP-Code:
    Testausgabe 1
    result 
    |object(mysqli_result)#27 (5) { ["current_field"]=> int(0) ["field_count"]=> int(2) ["lengths"]=> NULL 
    ["num_rows"]=> int(16) ["type"]=> int(0) } |
    Testausgabe 2
    store 
    || info || affected_rows |16errno |0error || field_count |2
    Frage: was ist falsch: errno, error, field_count liefern doch Ergebnisse, die besagen: Abfrage war erfolgreich????

    base_query ist gemappt auf query, falls notwendig liefere ich die Klasse nach.... aber ehrlich, da wird nichts zermarmelt.
    Ein Tipp?, Gruß Wilfried
    Zuletzt geändert von wshbg; 27.01.2011, 23:03. Grund: Umbruch geändert
    Die Macht der Presse spüren vor allem die Weintrauben.

  • #2
    Hallo,

    bitte Code auf maximal 100 Zeichen (empfohlen 80) umbrechen, damit man nicht querscrollen muss.

    Du hättest noch erwähnen können, dass deine Klasse entweder von mysqli abgeleitet ist oder einen Wrapper für diese darstellt, dann würde man schneller durchsehen. Wenn ich also davon ausgehe, dass dein store_result dasselbe macht wie mysqli::store_result, fällt mir in diesem Zusammenhang folgender Hinweis aus dem Handbuch ein:

    Also possible reason for this function returning FALSE after successful call to mysqli_query() can be too large result set (memory for it cannot be allocated).
    Kannst du das ausschließen (z. B. durch eine Limit-Klausel)?

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Moin,
      ist klar, das ist der letzte mögliche Fehler...... laut Manual.
      ["num_rows"]=> int(16) in $result und affected_rows |16| sagen aber, da läuft kein Speicher über.
      N.b. mit dem MySQL Query Browser parallel kommen auch läppische 16 Ergebnisse.
      Ich bin ziemlich ratlos, vielleicht doch ein bug??
      Wilfried
      Die Macht der Presse spüren vor allem die Weintrauben.

      Kommentar


      • #4
        Moin,
        gelöst ?!?! oder workaround
        Code:
        .
        .
        if ($result = $this->base_real_query($sql)){
        	if ($res_store = $this->store_result()){ 
        		while ($row = $res_store->fetch_assoc()) {
        			$sql  = " 
        			UPDATE 
        				z_session 
        			SET 
        				sessionid = NULL 
        			WHERE 
        				ord = ".$row['ord']
        			;	
        			$this->base_query($sql);
        			$hit->insert_Hit('tag_'.date("z",$row['access']), 'counter_gesamt', date("Y",$row['access']));
        		}
        		$res_store->free_result();
        	} 
        }
        So funkt's....
        Jetzt die Frage: ist das Manual "ungenau"? oder stimmt es (habe ich an einigen Stellen gelesen) dass mysqli Macken hat??
        N.b. base_query und base_real_query werden auf query und real_query weitergereicht (die Original-benannten aufs Original)
        Es hätte mich stutzig machen können: zu jeder allerallereinfachsten Funktion gibt es eine Beschreibung.... ausgerechnet hier nicht
        Gruss, Wilfried
        Die Macht der Presse spüren vor allem die Weintrauben.

        Kommentar

        Lädt...
        X