#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 + Multi-Zitat Zitieren
#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 )); ?> + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 ?? + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 ); ?> + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 (); + Multi-Zitat Zitieren