【问题标题】:Mysqli_fetch_assoc($result), pointer moves to the next record. Is there any way to reset the pointer to the start of the query result?mysqli_fetch_assoc($result),指针移动到下一条记录。有没有办法将指针重置为查询结果的开头?
【发布时间】:2013-02-04 11:29:10
【问题描述】:

看看这段代码

假设你在php中循环一组mysql查询结果

while($temp = mysqli_fetch_assoc($result))
{
 echo $temp['id']; // ID Column
}

当您执行 $temp=mysqli_fetch_assoc($result) 时,指针基本上会移动到下一条记录。有没有办法将指针重置为查询的开头?在此循环结束后,mysqli_fetch_assoc($result) 只会返回空行,使其再次无法使用。那么可能的解决方案是什么?

【问题讨论】:

  • 您链接的问题非常虚假。结果不会从您的结果集中随机消失。
  • @ÁlvaroG.Vicario - 我有点同意,只是想说这是对那里的 cmets 的后续行动。删除了链接,但我确实被这个问题困扰了很长一段时间。

标签: php mysql mysqli


【解决方案1】:

所以我今天在工作中遇到了这个问题,我最初找到的唯一解决方案是重新查询,或者使用 mysql 的临时副本导致变量。两者都没有吸引力。

有一个更简单的解决方案是 mysql_data_seek。

基本语法是 mysqli_data_seek(data,row)

所以在这种情况下,您只需这样做

mysqli_data_seek($result,0)
$row=mysqli_fetch_assoc($result);// Will now return the first row.

以类似的方式,您也可以再次循环。

它与 mysql_data_seek 类似。希望对您有所帮助。

【讨论】:

  • 如果我再看到一个人使用已弃用的 mysql 驱动程序,我的大脑会爆炸。 php.net/manual/en/mysqlinfo.api.choosing.php
  • 我实际上确实使用了 mysqli ......正如我所说,这是参考最初的问题。无论如何都会进行必要的编辑。
【解决方案2】:
  1. 从数据库循环中退出直接打印数据的事情。学习将您的业务逻辑与演示分开。
  2. 为自己获取一个数据库包装器,从代码中删除所有这些丑陋的 mysqli_fetch_assoc。
  3. 将查询结果存储在数组中。
  4. 根据需要多次使用此数组。

这样

$data = $db->getAll("SELECT * FROM table");

foreach ($data as $row) // 1st iteration
foreach ($data as $row) // 2nd iteration
foreach ($data as $row) // and so on

【讨论】:

  • 有趣的解决方案。而且也很整洁。
猜你喜欢
  • 1970-01-01
  • 2022-10-14
  • 2021-09-17
  • 2021-12-10
  • 1970-01-01
  • 2015-11-28
  • 2020-03-22
  • 2011-12-01
  • 2021-09-15
相关资源
最近更新 更多