<?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不运行,而下面的运行?有谁能解释一下吗?
发布于 2018-07-15 18:25:09
当您运行查询时,它会返回一个结果:
$ress = mysqli_query($connect, $query);
var_dump($ress); // You will see it's a result.此时,$ress只包含您刚才查询的结果。你可以这样想:
$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循环稍差一些)
发布于 2018-07-15 19:00:19
$ress = mysqli_query($connect, $query);该行返回一个结果集,该结果集是可遍历的。所以你的第二个foreach运行得很好。
而下面的代码行(mysqli_fetch_array)一次获取一行,并使其成为一个数组。
$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
while($result = mysqli_fetch_array($ress)) {
echo $result["ID"];
}https://stackoverflow.com/questions/51347404
复制相似问题