[PHP] Datenabfrage aus MySQL

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Freakzone, 8. April 2009 .

Schlagworte:
  1. 8. April 2009
    Datenabfrage aus MySQL

    Hallo Leute,

    ich hab n klitzkleines Problem
    Und zwar:

    Ich möchte mir den gesamten Inhalt einer Tabelle aus MySQL auslesen lassen und diese dann auf die Seite schreiben um z.B. meine Member anzuzeigen. Der Code sieht bis jetzt so aus:

    Code:
    <?php
    
     $abfrage = "SELECT username FROM User";
     $ergebnis = mysql_query($abfrage);
     $menge = mysql_num_rows($ergebnis);
     $row = mysql_fetch_object($ergebnis);
    
     echo "<b>Eingetragene User ($menge) :</b>";
    
    
     while($row = mysql_fetch_object($ergebnis)) 
     {
     echo "$row->username <br>";
     }
    
    ?>

    Eigentlich ja ganz simpel, mein Problem ist nur, dass der erste Datensatz ewig nicht mit ausgegeben wird. Hab damit auch grad erst angefangen und soweit klappt eigentlich alles auch nur das is halt immer so n bissle doof, dass der erste Datensatz nie angezeigt wird xD

    Benutze ich eine falsche Methode mit dieser while Schleife ??
    Oder mache ich irgendwas falsch ??


    Würd mich über Hilfe freuen
     
  2. 8. April 2009
    AW: Datenabfrage aus MySQL

    weil du das erste ergebnis ja schon vor der schleife anforderst isses natürlich aus dem stack entfernt (bzw der zeiger is aufm index 1).
    abhilfe schafft hier ne do-while schleife

    PHP:
    <? php

      $abfrage 
    "SELECT username FROM User" ;
      
    $ergebnis  mysql_query ( $abfrage );
      
    $menge  mysql_num_rows ( $ergebnis );
      
    $row  mysql_fetch_object ( $ergebnis );

      echo 
    "<b>Eingetragene User ( $menge ) :</b>" ;

      do {
         echo 
    " { $row -> username } <br>" ;
      } while(
    $row  mysql_fetch_object ( $ergebnis ));

    ?>
     
  3. 8. April 2009
    AW: Datenabfrage aus MySQL

    PHP:
    <? php

      $abfrage 
    "SELECT * FROM User" ;
      
    $ergebnis  mysql_query ( $abfrage );
      
    $menge  mysql_num_rows ( $ergebnis );


    echo 
    '<b>Eingetragene User ($menge) :</b>' ;
    while(
    $row  mysql_fetch_array ( $ergebnis ))
    {
      echo 
    $row [ username ]. '<br>' ;
    }
    ?>
    wenn du jetzt in der Tabelle noch mehr werte hast wie zb Name und Vorname, liegen diese in $row[name] und $row[vorname].

    Die whileschleife läuft alle einträge durch und gibt sie unternander aus.

    Willst du die Ausgabe also Mit vollständigem namen musst du schreiben:

    PHP:
    <? php

      $abfrage 
    "SELECT * FROM User" ;
      
    $ergebnis  mysql_query ( $abfrage );
      
    $menge  mysql_num_rows ( $ergebnis );


    echo 
    '<b>Eingetragene User ($menge) :</b>' ;
    while(
    $row  mysql_fetch_array ( $ergebnis ))
    {
      echo 
    $row [ Vorname ]. ' <b>' . $row [ username ]. '</b> ' . $row [ Nachname ]. '<br>' ;
    }
    ?>
    Das erzeugt:

    Eingetragene User (2)
    Hans Mortadella Wurst
    Peter HaHa Lustig
     
  4. 8. April 2009
    AW: Datenabfrage aus MySQL

    wenn du ihm schon ne lösung gibst, dann doch bitte eine valide...

    PHP:
    echo  $row [ 'Vorname' ]. ' <b>' . $row [ 'username' ]. '</b> ' . $row [ 'Nachname' ]. '<br>'
    so und nicht anders
     
  5. 9. April 2009
    AW: Datenabfrage aus MySQL

    Okay also versteh ich das richtig ^^


    Mit mysql_fetch_object, was ich ja nutze lag es daran, dass ich die while Schleife vor das echo gesetzt habe und damit das erste Ergebnis schon anfordere ??

    Also dort dann lieber mit der do while-Schleife arbeiten ??



    Beim 2. weiß ich schon, da wird die query ja in ein Array gepackt und abgefragt. Finde die object Methode aber irgendwie bequemer ^^


    Ist es eigentlich nötig $row->username in die geschweiften Klammern zu setzen ??
     
  6. 9. April 2009
    AW: Datenabfrage aus MySQL

    Für sauberen Code ja.
    Der Interpreter würde es auch ohne packen, aber warum unsauber coden?
     
  7. 10. April 2009
    AW: Datenabfrage aus MySQL

    Super, funktioniert mit der do while Schleife jetzt perfekt


    Danke für die Beiträge, Bewertungen sind raus
     
  8. 12. April 2009
    AW: Datenabfrage aus MySQL

    Als kleine Anmerkung solltest du dich von mysql_fetch_object() (PHP: mysql_fetch_object - Manual) distanzieren und zu mysql_fetch_assoc() (PHP: mysql_fetch_assoc - Manual) wechseln

    Die Gründe sind einfach die Stabilität und Sicherheit die im Vordergrund stehen sollte. Zumal man schöner mit den Arrays (meiner Meinung nach) arbeiten kann.
     
  9. 12. April 2009
    AW: Datenabfrage aus MySQL

    ähm, dir is klar das du bei mysql_fetch_object eine eigene klasse übergeben kannst die instantiiert werden soll? (default is StdClass)

    d.h. du kannst dir für bestimmte fälle nen eigenen controller basteln und mit dem interface ArrayAccess kannst dann den zugriff mittels [] auch nachbauen ^^

    beispiel:
    PHP:
    <? php
        
    class  DBResultHandler  implements  ArrayAccess IteratorAggregate
        
    {
            protected 
    $result  = array();
            
            
    //set
            
    public function  __set ( $prop $value )
            {
                
    $this -> result [ $prop ] =  $value ;
            }
            
            

            
    public function  offsetSet ( $prop $value )
            {
                
    $this -> __set ( $prop $value );
            }
            
            
    //get
            
    public function  __get ( $prop )
            {
                return (isset(
    $this -> result [ $prop ])) ?  $this -> result [ $prop ] :  null ;
            }
            
            

            
    public function  offsetGet ( $prop )
            {
                return 
    $this -> __get ( $prop );
            }
            
            

            
    public function  offsetExists ( $prop )
            {
                return isset(
    $this -> result [ $prop ]);
            }
            
            

            
    public function  offsetUnset ( $prop )
            {
                unset(
    $this -> result [ $prop ]);
            }
            
            

            
    public function  getIterator ()
            {
                return new 
    ArrayIterator ( $this -> result );
            }
        }
        
        
    $r  mysql_fetch_object ( $queryID 'DBResultHandler' );
        print 
    $r [ 'collum' ];
        print 
    $r -> collum ;
        
        foreach(
    $r  as  $collum )
            
    print_r ( $collum );
    ?>
     
  10. 12. April 2009
    AW: Datenabfrage aus MySQL

    Wo ist denn bitte der Sinn wenn der größte Teil davon mit mysql_fetch_assoc() getan ist?! Also ich finde immer noch mysql_fetch_assoc() ist sicherer und einfach sinnvoller für jene Verwendung

    Sowie ich bei uns auf der Arbeit gehört hab, wird dies auch in PHP6 abgeschafft.. weiß aber nicht ob dies nur ein totes-Gerücht ist
     
  11. 13. April 2009
    AW: Datenabfrage aus MySQL

    in php6 wird wohl der neue treiber (mysqlnd) verwendet werden, die funktionen sollten aber alle gleich bleiben.

    eine sinnvolle verwendung wäre zb das auslesen von konfig-daten oder postings (wie hier) wo jede zeile ein posting erstellt.

    PHP:
    $config  mysql_fetch_object ( $queryID 'ConfigHandler' );
    if(
    $config -> getOption ( 'foo' ) ===  true ) { ...}
    PHP:
    while( $post  mysql_fetch_object ( $queryID 'PostBuilder' ))  $post -> build ();
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.