douhu1990 2018-11-02 19:06
浏览 58
已采纳

PHP如何迭代mysqli查询结果?

I'm learning to interact with a database in PHP. The code below works, but I do not understand how the loop iterates through $result.

<?php
  require_once('./login.php');
  $conn = new mysqli($hn, $un, $pw, $db);
  if ($conn->connect_error) die("DIED: CONNECTION FAILED.");

  $query= "SELECT * FROM table1";
  $result = $conn->query($query);
  if (!$result) die("DIED: QUERY FAILED.");

  while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $who = $row['WHO'];
    $what = $row['WHAT'];

    echo <<<_END
    WHO: $who<br>
    WHAT: $what<br>
_END;
  }

  $result->close();
  $conn->close();
?>

I understand that while a $result element is available, it will be assigned to $row and processed in the loop. But how does the interpreter know to move to the next $result element?

The code even works when using a for loop instead, such as...

$row_count = $result->num_rows;
for($j = 0; $j < $row_count; $j++) {
  $row = $result -> fetch_array(MYSQLI_ASSOC);

My question boils down to this: how does the interpreter know to use the next element in $result without needing something like $result[$j]?

  • 写回答

1条回答 默认 最新

  • dongya1875 2018-11-02 19:12
    关注

    The query returns a mysqli_result. Per the docs, this object is iterable http://php.net/manual/en/class.mysqli-result.php. So every time you call fetch_array(), the result object it is keeping track of which row it is currently on and returning the appropriate result, then moving forward one element in the result set. When there are no more results left, the function returns null which is evaluated as false thus terminating the loop.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥70 刚刚看到一个人的网站居然是通过cname访问的
  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!
  • ¥20 win11账户锁定时间设为0无法登录