使用foreach()而不是while()查询结果

时间:2013-03-19 13:32:27

标签: php mysql foreach

我有这个代码工作(我想)。

$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也可以“手动”填充,而不是来自查询。

我做错了什么..?

3 个答案:

答案 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,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:1)

首先,值得知道mysql_xx()函数已被弃用;建议不再使用它们,并将代码转换为mysqliPDO库。

现在,回答你的问题:

您不能将foreachmysql_xxx()函数返回的记录集一起使用。它根本无法完成。

但是,两个备用API(mysqliPDO)都将其记录集对象作为迭代器返回,这意味着可以 使用foreach进行循环它们。

因此,您的问题的答案是:如果您想使用foreach循环记录集,则需要切换到其他数据库API之一。

(作为奖励,如果你切换,其他API也提供了相对于旧mysql_xx()功能的相当多的额外功能)

答案 2 :(得分:0)

mysql_fetch_assoc只读取单行。

这意味着foreach迭代了单行的列。