While Schleife bei mysql_fetch_array wird nur ein mal ausgeführt

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

  • While Schleife bei mysql_fetch_array wird nur ein mal ausgeführt

    Einen wunderbaren Abend wünsch ich euch allen,
    ich stehe vor einem absolut seltsamen Problem.
    Ich habe den folgenden Abschnitt:
    PHP-Code:
    function sitemap_parts($home=0) {
      global 
    $db;
      
    $output='';
      
    $db->query('SELECT id, title, script, lastedit, changefreq, priority FROM cms3_nodes WHERE hidden=0 and public=1 and home='.$home.' and type!=2 order by position asc',$home);
      
    $db->num_rows($home);
      while(
    $data $db->fetch_array($home)) {
        [...]
      }
      return 
    $output;

    num_rows gibt 11 entsprechende Datensätze aus, allerdings wird nur der erste Datensatz ausgegeben.

    Ein anderer Code Abschnitt:
    PHP-Code:
    $db->query("SELECT file FROM ".$db->prefix."dependencies WHERE node='".$id."' AND file LIKE '%.js'");
    while(
    $jsdata $db->fetch_array())
      
    $scriptjs[] = $jsdata['file']; 
    Dieser funktioniert einwandfrei.


    PHP-Code:
    function query($query_string$res=0)
    {
      
    $this->query_string $query_string;
      
    $this->result[$res] = mysql_query($query_string,$this->conn);  //Abfrage ausfuehren
      
    $this->debug_handle('query()');  //Debugfunktion aufrufen
      
    return $this->result[$res];  //result zurueckgeben
    }

    function 
    num_rows($res=0)
    {
      
    $num mysql_num_rows($this->result[$res]);  //Datensatzanzahl zurueckgeben
      
    $this->debug_handle('num_rows('.$num.')');  //Debugfunktion aufrufen
      
    return $num;
    }

    function 
    fetch_array($res=0)
    {
      
    $this->row = @mysql_fetch_array($this->result[$res]);
      
    $this->debug_handle('fetch_array()');  //Debugfunktion aufrufen
      
    return $this->row;  //Datensatz zurueckgeben

    Hat irgend jemand den Hauch einer Ahnung woran das liegen könnte?

    Liebe Grüße,
    Christian
    Wer immer nur tut was er kann lernt nie was neues.

  • #2
    Hallo,

    ist $db auch wirklich eine Instanz genau der Klasse zu der die 3 Methoden im unteren Code-Block gehören? Wie ist dein Error-Reporting eingestellt? Bisher sehe ich nur ein @-Zeichen, was sich laut Forenreglen schon von selbst verbietet

    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
      Guten Morgen,
      das erstaunliche ist ja, dass der erste Datensatz problemlos ausgegeben und verarbeitet wird, aber alle weiteren verschwinden.

      Das error_reporting ist auf E_ALL eingestellt und gibt bis auf einen Notice der nichts mit der Sache zu tun hat nichts aus.

      Das @ stöhrt in diesem fall ja nicht, da zum einen ja etwas zurück gegeben wird und zum anderen ja noch mySQL-Fehler über die klasseninterne Debug Funktion ausgegeben werden. trotzdem habe ich einen durchlauf ohne das @ gemacht. ebenfalls ohne Erfolg.

      Ich habe das Problem jetzt so behoben das ich die Klasse durch die u.a. Funktion ergenzt habe. das ursprüngliche Problem bleibt mir aber immer noch rätselhaft
      PHP-Code:
      function fetch_full_array($res=0)
      {
        
      $this->rowset null;
        while(
      $this->row mysql_fetch_array($this->result[$res]))
          
      $this->rowset[] = $this->row;

        
      $this->debug_handle('fetch_full_array()');  //Debugfunktion aufrufen
        
      return $this->rowset;  //Datensatz zurueckgeben

      Zuletzt geändert von ChristianM.; 30.08.2011, 08:07.
      Wer immer nur tut was er kann lernt nie was neues.

      Kommentar


      • #4
        Warum verwendest du die veralteten mysql_* Funktionen?

        mysqli und PDO unterstützen übrigens OOP, das heißt du musst auch nicht diesen Mischmasch aus prozeduralen und objektorientierten Code machen.

        global ist böse. Verwende das bitte nicht.

        @ ist auch böse. Zumindest so, wie du es verwendest.

        Kommentar


        • #5
          PHP-Code:
           $this->rowset null
          Warum null, wenn es doch ein Array sein soll?

          Warum $this->row, wenn row doch offensichtlich nur lokal in der Methode benutzt werden darf.
          Wir werden alle sterben

          Kommentar


          • #6
            PHP-Code:
            $this->rowset null
            Wegen akuter müdigkeit

            PHP-Code:
            $this->row 
            Da row über die Rückgabe der Funktion hinaus in ein paar Fällen verfügbar sein musste.
            Wer immer nur tut was er kann lernt nie was neues.

            Kommentar


            • #7
              Zitat von ChristianM. Beitrag anzeigen
              PHP-Code:
              $this->row 
              Da row über die Rückgabe der Funktion hinaus in ein paar Fällen verfügbar sein musste.
              Damit schaffst du dir aber leicht Inkonsistenzen, weil du beim Zugriff an einer anderen Stelle gar nicht immer wissen kannst, welchen „Zustand“ $this->row aktuell eigentlich hat/widerspiegelt.

              Und davon abgesehen, bei Verwendung dieses Konstrukts
              PHP-Code:
              while($this->row mysql_fetch_array($this->result[$res])) 
              ist $this->row nach durchlaufen der Schleife sowieso immer false.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar

              Lädt...
              X