我有这个代码工作(我想)。
$sql = "SELECT
order.id,
order.date
FROM
order";
$result = mysql_query($sql) or die(mysql_error());
$rows = mysql_fetch_assoc($result);
foreach($rows as $row){
echo $row['id'].": ".$row['date']."<br>";
}
结果与我使用的结果相同:
while($row = mysql_fetch_assoc($result)){
echo $row['id'].": ".$row['date']."<br>";
}
但奇怪的是,今天它停止了工作。或者它从来没有,但后来我变得有点疯狂。
我想使用foreach(),因为数组$ rows也可以“手动”填充,而不是来自查询。
我做错了什么..?
答案 0 :(得分:4)
那从未奏效(正确)。 mysql_fetch_assoc()
只返回一行,foreach
只是从结果集中迭代第一行的列。
如果没有先使用foreach
(或while
)循环将结果行提取到数组中,则无法使用for
。
如果您想使用foreach
,正如您所说,请执行以下操作:
$rows = array();
while ($row = mysql_fetch_assoc($result)) {
$rows[] = $row;
}
foreach ($rows as $row) {
// ...
}
此外,please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 1 :(得分:1)
首先,值得知道mysql_xx()
函数已被弃用;建议不再使用它们,并将代码转换为mysqli
或PDO
库。
现在,回答你的问题:
您不能将foreach
与mysql_xxx()
函数返回的记录集一起使用。它根本无法完成。
但是,两个备用API(mysqli
和PDO
)都将其记录集对象作为迭代器返回,这意味着可以 使用foreach
进行循环它们。
因此,您的问题的答案是:如果您想使用foreach
循环记录集,则需要切换到其他数据库API之一。
(作为奖励,如果你切换,其他API也提供了相对于旧mysql_xx()
功能的相当多的额外功能)
答案 2 :(得分:0)
mysql_fetch_assoc
只读取单行。
这意味着foreach
迭代了单行的列。