cream
cream

Reputation: 1129

PHP only returning first MySQL result

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

Answers (4)

Palladium
Palladium

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

arnoudhgz
arnoudhgz

Reputation: 1284

use:

while($res = mysql_fetch_assoc($result)) { echo $res['dealer']; }

Upvotes: 0

Madbreaks
Madbreaks

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

Calvin Jia
Calvin Jia

Reputation: 856

You should use

$res = mysql_fetch_assoc($result);

each time you want to retrieve a new row

Upvotes: 1

Related Questions