2009-04-24 5 views
2

Ok Ich habe eine Tabelle mit ein paar Feldern. Eines der Felder ist username. Es gibt viele Male, wo die username die gleiche ist, zum Beispiel:Wie durchlaufe ich ein PHP-Array, das Daten enthält, die von MySQL zurückgegeben werden?

    • Benutzername: bob
    • Passwort: bob
    • Bericht: 1
    • Benutzername: bob
    • passwort: bob
    • Bericht: 2

Ich habe eine SQL-Anweisung zu select * where username='bob'; aber wenn ich die folgenden PHP-Funktion zu tun, es wird nur das letzte Ergebnis zurück:

$thisrow = mysql_fetch_row($result); 

Ich brauche jedes Feld zu bekommen aus jeder Reihe. Wie soll ich das machen?

$mainsection="auth"; //The name of the table 
$query1="select * from auth where username='$user'"; 
$result = mysql_db_query($dbname, $query1) or die("Failed Query of " . $query1); //do the query 
$thisrow=mysql_fetch_row($result); 
echo "Study: " . $thisrow[1] . " - " . $thisrow[5]; 

Entschuldigung für solch eine dumme Frage. Ich kann nicht scheinen, die while Schleifen von mehr als einem Feld für das Leben von mir zu arbeiten.

+1

Vorsicht vor SQL-Injection mit $ user. Verwenden Sie mysql_real_escape_string ($ text), um sicherzustellen, dass Sonderzeichen maskiert werden. Mysql_fetch_assoc ($ result) gibt Ihnen außerdem ein benanntes Array - d. H. $ Thisrow ['name_of_database_field'] - auf lange Sicht viel einfacher zu arbeiten. – ceejayoz

Antwort

10

mysql_fetch_row ruft jede Zeile einzeln ab. Um mehrere Zeilen abzurufen, würden Sie eine while Schleife wie folgt verwenden:

while ($row = mysql_fetch_row($result)) 
{ 
    // code 
} 
2

eine Schleife verwenden, und verwenden mysql_fetch_array() statt Zeile:

while($row = mysql_fetch_array($result)) { 
    echo "Study: " . $row[1] . " - " . $row[5]; 
    // but now with mysql_fetch_array() you can do this instead of the above 
    // line (substitute userID and username with actual database column names)... 
    echo "Study: " . $row["userID"] . " - " . $row["username"]; 
} 
0

Ich schlage vor, Sie dies zu lesen: http://www.w3schools.com/php/php_mysql_select.asp Es gibt Ihnen einen Überblick über die richtige Verbindung zu mysql, Daten sammeln usw.

Für Ihre Frage sollten Sie eine Schleife verwenden:

while ($row = mysql_fetch_row($result)){//code} 

sagte Wie htw

0

Sie können auch eine Anzahl aller Zeilen in einer Tabelle wie folgt erhalten:


    $count = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS count FROM table")); 
    $count = $count["count"]; 

Sie können auch eine normale WHERE-Klausel an die Auswahl oben hängen und Zählen Sie nur Zeilen, die einer bestimmten Bedingung entsprechen (falls erforderlich). Dann können Sie Ihre Zählung für Loops verwenden:

 
    $data = mysql_query("SELECT * WHERE username='bob'"); 
    for ($i = 0; $i

Auch mysql_fetch_array() ist in der Regel viel einfacher zu verwenden, da es Daten in einem assoziativen Array speichert, so dass Sie Daten mit dem Namen der Zeile zugreifen können, eher als es ist numerischer Index.

Edit: Es gibt eine Art Bug oder etwas, wo mein zweiter Codeblock nicht alles zeigt, sobald es gepostet wird. Es zeigt sich gut in der Vorschau.

0

Ich mag es, die DB-Logik von der Anzeige zu trennen. Im Allgemeinen lege ich meine Ergebnisse in ein Array, das ich im HTML-Code aufrufen kann. Rein persönliche Präferenz; aber hier ist wie hast würde ich das Problem nähern: (ich den $ sql aus der Fehlermeldung in der Produktion nehmen würde)

<?php 
$sql=" 
    SELECT * 
    FROM auth 
    WHERE username='$user'; 
    "; 
$result = mysql_query($sql) 
    or die("Failed Query : ".mysql_error() . $sql); //do the query 

while ($ROW = mysql_fetch_array($result,MYSQL_ASSOC)) { 
    $USERS[] = $ROW; 
} 
?> 

HTML CODE 

<? foreach ($USERS as $USER) { ?> 

Study: <?=$USER['dbFieldName'];?> - <?=$USER['dbFieldName2'];?> 

<? } //foreach $USER ?> 

0

$ qry = mysql_query (select * wo username = 'bob');

if (mysql_num_rows ($ qry))

{

while($row=mysql_fetch_array($qry,MSQL_NUM)) 

{ 

     echo $row[0]."&nbsp;&nbsp;".$row[1]."&nbsp;&nbsp;".$row[2]."<br>"; 

} 

}

Verwandte Themen