首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqli_fetch_array和foreach的解释

问mysqli_fetch_array和foreach的解释
EN

Stack Overflow用户
提问于 2018-07-15 18:16:06
回答 2查看 426关注 0票数 0
代码语言:javascript
复制
<?php

$connect = mysqli_connect("localhost", "root", "", "hempbag_db") or die("Connection failed");

$query= "Select * from tbl_sales";
$ress = mysqli_query($connect, $query);
$result = mysqli_fetch_array($ress);

foreach($result as $a)
{
 echo $a['ID'];   // This doesnt print although i used fetch array
}

foreach($ress as $a)
{
 echo $a['ID'];   // This works why???? This variable has only query run
}

?>

为什么上面的foreach不运行,而下面的运行?有谁能解释一下吗?

EN

回答 2

Stack Overflow用户

发布于 2018-07-15 18:25:09

当您运行查询时,它会返回一个结果:

代码语言:javascript
复制
$ress = mysqli_query($connect, $query);
var_dump($ress); // You will see it's a result.

此时,$ress只包含您刚才查询的结果。你可以这样想:

  • 你去仓库,订1000盒饼干。她走到后面,把你的箱子准备好,然后回来递给你一张写着订单号的纸。(这是$ress)。现在,你不能循环它,你不能用它做任何事情,

,

  • ,你现在把那张纸,递给你的助手,你说你想把所有的饼干都装上你的卡车(现在是mysqli_fetch_array())。你的助手去拿饼干,然后把饼干还给你。

简单地说,mysqli_query只返回一个像Result#1这样的对象。在Result#1中,mysql可以告诉您返回了多少行mysql_num_rows(Result#1),如果是select查询,则可以获得实际数据:mysqli_fetch_array(Result#1)。

现在来看一下理由:性能。假设你不想要1000块饼干,你只想知道他们是否有1000块饼干。如果她带着所有的饼干回来,而你必须自己数一数,那就困难多了。相反,有了这张纸,她就可以确定你能订购多少盒。传输的数据更少,效率更高。

需要注意的是,在后来的php版本中,他们让结果是可迭代的,这意味着如果你尝试遍历它,它会自动对结果调用mysqli_fetch_array,并返回结果。

此外,mysql_fetch_array将从数据库返回一行,并且不能通过foreach进行循环。也许你在想mysqli_fetch_all?这将返回所有行,并且可以遍历(尽管性能比使用带有mysqli_fetch_array的while循环稍差一些)

票数 3
EN

Stack Overflow用户

发布于 2018-07-15 19:00:19

代码语言:javascript
复制
$ress = mysqli_query($connect, $query);

该行返回一个结果集,该结果集是可遍历的。所以你的第二个foreach运行得很好。

而下面的代码行(mysqli_fetch_array)一次获取一行,并使其成为一个数组。

代码语言:javascript
复制
$result = mysqli_fetch_array($ress); // Suppose you have 3 rows, Now cursor is at row 1
echo $result["ID"]; // this will print FIRST row's ID


$result = mysqli_fetch_array($ress); // Now cursor is at row 2
echo $result["ID"]; // this will print SECOND row's ID. 


$result = mysqli_fetch_array($ress); // Now cursor is at row 3
echo $result["ID"]; // this will print THIRD row's ID.

回显所有ID

代码语言:javascript
复制
while($result = mysqli_fetch_array($ress)) {
   echo $result["ID"];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51347404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档