编辑: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
答案 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特别轻松转移。