Reputation: 1129
I have a loop that should display a summary of all MySQL results. It does this by determining how may results there will be and then loops that many times. So if there are 43 results that match my query, instead of displaying all 43 results, it only displays the first result 43 times. Please help! Here's my code:
if (empty($res)) {
echo 'No results found';
} else if($num>1){
echo "<b>".$num_rows."<b> results found...<br>";
while ($res = mysql_fetch_assoc($result)) {
echo "<a href='#'>{$res['dealer']}</a><br>";
}
} else {
echo "<table border=\"0\"><tr><td colspan=\"2\"><span class=\"dealer\">" . $res['dealer'] . "</span></td></tr><tr><td><span class=\"label\">Pin: </span><span class=\"inf\">" . $res['pin'] . "</span></td><td><span class=\"label\">OB CODE: </span><span class=\"ob\">" . $res['ob'] . "</span></td></tr><tr><td><span class=\"label\">Program Director:</span></td><td><span class=\"inf\">" . $res['contact'] . "</span></td></tr><tr><td valign=\"top\"><span class=\"label\">Address:</span></td><td><span class=\"inf\">" . $res['address'] . "<br>" . $res['city'] . ", " . $res['state'] . "<br>" . $res['zip'] . "</span></td></tr><tr><td><span class=\"label\">Dealer Phone:</span></td><td><span class=\"inf\">" . $res['phone'] . "</span></td></tr><tr><td><span class=\"label\">Codes Valid on:</span></td><td><span class=\"inf\">" . $res['website'] . "</span></td></tr></table>";
}
Thanks a lot in a advance!
Upvotes: 0
Views: 134
Reputation: 3763
That's because you've only fetched the first row (when you did $res = mysql_fetch_assoc($result);
). What you're trying to do is actually unnecessary: mysql_fetch_assoc()
will automatically move the data pointer ahead every time it runs. What you can do instead (and is in fact common practice) is this:
//...
while ($res = mysql_fetch_assoc($result)) {
echo "<a href='#'>{$res['dealer']}</a><br />";
}
//...
On a side note, the mysql_*
functions are soon to be deprecated. You can use either mysqli
or PDO
instead; if you're a lazy bum with a lot of code to switch (like me), you can use the mysqli
procedural functions - they're almost identical to the original mysql_*
functions.
Upvotes: 3
Reputation: 1284
use:
while($res = mysql_fetch_assoc($result)) {
echo $res['dealer'];
}
Upvotes: 0
Reputation: 19539
You have to do this inside your loop:
$res = mysql_fetch_assoc($result);
...as that only pulls the first result otherwise. Here's the correct way to do it:
while($res = mysql_fetch_assoc($result)){
echo "<a href='#'>".$res['dealer']."</a><br>";
i++;
}
Cheers
Upvotes: 1
Reputation: 856
You should use
$res = mysql_fetch_assoc($result);
each time you want to retrieve a new row
Upvotes: 1