1

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

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

我究竟做错了什么..?

4

3 回答 3

4

那从来没有(正确地)起作用。mysql_fetch_assoc()只返回一行,你foreach只是从结果集中迭代第一行的列。

如果foreach不首先使用while(或for)循环将结果行提取到数组中,则无法使用。

foreach如您所说,如果您想使用,请执行以下操作:

 $rows = array();
 while ($row = mysql_fetch_assoc($result)) {
     $rows[] = $row;
 }

 foreach ($rows as $row) {
     // ...
 }

另外,请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-03-19T13:34:06.907 回答
1

首先,值得知道这些mysql_xx()功能已被弃用;建议不要再使用它们,而是将代码切换到mysqliPDO库。

现在,回答你的问题:

您不能foreach与函数返回的记录集一起使用mysql_xxx()。根本做不到。

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

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

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

于 2013-03-19T13:39:57.250 回答
0

mysql_fetch_assoc只读取单行。

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

于 2013-03-19T13:35:16.530 回答