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.

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

报告相同问题?