【问题标题】:mysql fetch return only return most recent row in classmysql fetch return 仅返回类中的最新行
【发布时间】:2012-10-12 06:16:49
【问题描述】:

我有一个 MySql 类,我通过将 Mysql 行作为方法返回来获取它们:

  public function fetch_assoc($result_set){
     return mysql_fetch_assoc($result_set);
  }

由于某种原因,当我尝试通过已实例化的对象返回的方法进行迭代时,它只返回一个结果。

  while ($row = $a->fetch_assoc($result_set){
  ...
  }

虽然采用旧时尚的方式工作,但给了我所有的行

  while($row = mysql_fetch_array($result_set)){
      $row['0'];
  } 

有什么想法吗?

【问题讨论】:

  • 有趣。您是否尝试在返回之前将结果复制到 var 中?公共函数 fetch_assoc($result_set){ $row = mysql_fetch_assoc($result_set);返回$行; }
  • 这与问题并不完全相关。但是,如果您正在编写新代码,您可能不想使用已弃用的 mysql API。有更好的选择。 PDO:php.net/manual/en/book.pdo.php MySQL 改进版:php.net/manual/en/book.mysqli.php
  • 顺便说一句,也许这只是一个复制/粘贴错误,但您在 while 循环中缺少括号。 ` while ($row = $a->fetch_assoc($result_set){` 应该是 ` while ($row = $a->fetch_assoc($result_set)){`.

标签: php mysql


【解决方案1】:

那是因为 mysql_fetch_assoc 只返回一个结果并将指针移动到下一个。因此,在每次迭代时,它返回移动指针并在到达结果末尾时返回 false。

您可以通过这种方式修改您的方法以使其工作:

public function fetch_assoc($result_set){
    $resultArray = array();
    while ($row = mysql_fetch_assoc($result_set){
        $resultArray[] = $row;
    }
    return $resultArray;
}

你可以这样使用数据:

foreach ($obj->fetch_assoc($result_set) as $row){
    echo $row['stuff'];
}

请注意,在这种情况下,$obj->fetch_assoc($result_set) 返回所有结果,我只是使用 foreach 循环遍历它;

【讨论】:

  • 更好的方法是将结果集建模为一个迭代器,它可以在迭代时调用 fetch 函数。
  • @Sven 如果是这样,还不如坚持mysql_fetch_assoc
  • 好像他知道mysql_fetch_assoc 一次只能获取一行。他有一个while 循环来获取所有元素,但他说它仍然不起作用。这让我想知道他的$result_set 变量是否没有被额外的间接层正确修改。
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
相关资源
最近更新 更多