调用mysql_fetch_assoc只返回第一个结果,即使多次调用(CLOSED:TYPO)

时间:2017-12-07 22:56:36

标签: php mysql

编辑:Phil关于将MySQL_query变成变量而不是通过while循环运行的评论是正确的答案!

我正在尝试使用MySQL_fetch_assoc运算符打印项目表中的所有项目。即使在while循环中调用它也只返回第一个结果,但是当通过命令行运行调用时,它会返回所有正确的结果。我试图在没有$numRows > 0条件的情况下运行while命令但是它只返回一个只有第一个结果的无限数组。

...
$query = "SELECT * FROM item JOIN seller ON item.seller_id = seller.seller_id;";
$numRows = MySQL_num_rows(MySQL_query($query));
while ($numRows > 0 && $row = MySQL_fetch_assoc(MySQL_query($query))) {
echo "<tr><td>" . $row["item_name"] . "</td>\n" .
" <td>" . $row["category"] . "</td>\n" .
" <td>" . $row["item_price"] . "</td>\n" .
" <td>" . $row["user_email"] . </td>\n" .
" </tr>\n";
$numRows--;
...

应该返回所有项目的表格

Name Category Price Seller Email
cup  utensils 200  bob@email.com
shaker utensils 300 sam@email.com
spoon  utensils 400 james@email.com

但仅返回包含第一个结果的表

Name Category Price Seller Email
cup  utensils 200   bob@email.com
cup  utensils 200   bob@email.com
cup  utensils 200   bob@email.com

1 个答案:

答案 0 :(得分:0)

您的while循环使用MySQL_query($query)表达式在每次迭代时创建一个新资源,因此当您调用MySQL_fetch_assoc(MySQL_query($query))时,您始终会收到查询的第一行。

对此的解决方案是在while循环之前创建资源,然后在该资源上调用MySQL_fetch_assoc()

例如:

$query = "SELECT * FROM item JOIN seller ON item.seller_id = seller.seller_id;";
$res = MySQL_query($query)
$numRows = MySQL_num_rows($res); // You can also modify this line
while ($numRows > 0 && $row = MySQL_fetch_assoc($res)) {
    ...
}

正如黑曜石时代所说,你应该考虑转向MySQLi或PDO。如果您的所有代码都使用较旧的MySQL函数,则MySQLi特别轻松转移。