kleine frage zu mysql_fetch_array

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

  • kleine frage zu mysql_fetch_array

    moin

    ich wollte nur mal fragen warum folgender code eine endlosschleife erzeugt:
    PHP-Code:
    while($benutzer mysql_fetch_array(mysql_query("SELECT * FROM guestbook")))
    {
        echo 
    $benutzer['name'];

    und folgender anweisung nicht:

    PHP-Code:
    $resultat=mysql_query("SELECT ....");

    while(
    $benutzer=mysql_fetch_array($resultat))
    {
       
    // usw. usw.

    ich versuche gerade eine klasse für die datenbank-funktionen zu schreiben und sie erzeugt jedesmal eine endlosschleife und ich hab eben herausgefunden dass es damit zusammenhängt.

    kann mir jemand erklären warum ich das nicht direkt in die schleife einbauen kann?

    vielen dank im voraus

  • #2
    weil bei jedem Schleifendurchgang die Anweisung(en) in der Klammer neu ausgewertet werden, somit auch der Query bei jedem Durchlauf neu abgesetzt wird und du immer nur den ersten raus kriegst und keinerlei Abbruch-Bedingung besteht

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      vielen dank!

      kannst du mir vielleicht auch sagen wie ich die folgende db-klasse ändern muss damit sie nach dem aufruf von $db->fetch() keine endlosschlaufe erzeugt? ich möchte dass die klasse so viel arbeit wie möglich übernimmt damit ich wirklich nur mit einem befehl ein array erzeugen kann.
      PHP-Code:
      class DB {

          var 
      $benutzer="root";
          var 
      $passwort="blub";
          var 
      $host="localhost";
          var 
      $db="b4c";
          
          function 
      DB()
          {
              
      $this->db_link = @mysql_pconnect($this->host,$this->benutzer,$this->passwort) or die ("Datenbankverbindung fehlgeschlagen!");
              
      $this->db_choose = @mysql_select_db($this->db) or die ("Datenbank nicht gefunden"); 
          }
          
          function 
      db_query($query)
          {
              
      $x= @mysql_query($query) or die ("Abfrage war ungültig!".mysql_error());
              return 
      $x
          }

          function 
      fetch($quelle)
          {
              
      $res=$this->db_query($quelle);
              return 
      mysql_fetch_array($res);
          }
          
      }

      $db =& new DB;

      while(
      $anzeigen $db->fetch("SELECT * FROM `guestbook`"))
      {
         
      //anweisungen

      Kommentar


      • #4
        Ich würde - wenn du es denn unbedingt so haben willst - die letzte Query + das Result in ne Klassenvariable speichern und dann schauen ob die Query die gleiche ist und dann nicht ausführen sondern das Result benutzen.

        PHP-Code:
        if ($this->query != $quelle$this->result $this->do_query($quelle);

        return 
        mysql_fetch_array($this->result); 
        btw.: ich würd evtl. mysql_fetch_assoc benutzen, wenn du nicht unbedingt numerische + string indizes brauchst - oder mysql_fetch_array mit Konstante MYSQL_ASSOC
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar

        Lädt...
        X