【问题标题】:Output of mysqli_fetch_array($data) with loop and without loop带循环和不带循环的 mysqli_fetch_array($data) 的输出
【发布时间】:2018-05-23 13:04:46
【问题描述】:

当我使用 while 循环使用 mysqli_fetch_array() 打印特定列的值时,我从数据库中得到了正确的输出。

while($row=mysqli_fetch_array($data))
{
  echo $row['name'];
}

但是当我使用下面提到的没有循环的代码时,输​​出是不同的。

   $row=mysqli_fetch_array($data);
    echo $row['name'];
    echo $row['name'];
    echo $row['name'];
    echo $row['name'];
    echo $row['name'];
    echo $row['name']; 

当我使用下面提到的代码时,我可以看到我使用 mysqli_fetch_array() 以关联数组的形式获取所有行。

$con=mysqli_connect("localhost", "root", "", "student_details");
$data=mysqli_query($con,"select * from `registration`");
while ($row = mysqli_fetch_array($data))
 {  
    $rec[]=$row;
 }
echo "<pre>"; 
print_r($rec);
echo "</pre>";
?> 

我的问题是如何获取特定列的所有值(使用 while 循环),而不使用任何循环。

【问题讨论】:

  • 每次调用 mysqli_fetch_array 都会返回结果集中的 next 行。如果您只调用一次,您将只能从数据库中检索第一行。如果您不想使用循环来获取结果,则可以改用mysqli_fetch_all,尽管显然您仍然需要循环遍历结果集才能对其进行任何处理。
  • @iainn 这是我的问题,我们如何在没有循环的情况下获得输出?
  • 好吧,您可以致电echo $results[0]['name']echo $results[1]['name'] 等。但这正是循环旨在避免的。如果您使用fetch_all,那么您可以使用array_column 将所有名称放在一个数组中,但除非您知道集合中有多少行,否则您总是必须在某个时候使用循环来处理它们.我不太确定您要解决什么问题以及为什么。
  • 那么,您应该了解循环是如何工作的。在每次运行之前(或之后,取决于循环)检查条件,这意味着 mysql_fetch_array 在每次运行之前运行
  • mysql_fetch_array 处于这种状态,每次循环运行前都会调用它。那么你如何想象检查条件呢?

标签: php


【解决方案1】:

您可以使用mysqli_fetch_all获取所有数据。

签入phpdocs

-> mysqli_result::fetch_all -- mysqli_fetch_all -- -> 将所有结果行作为关联数组、数值数组或两者都获取

【讨论】:

  • 我通读了链接,但它指出,“获取所有结果行并将结果集作为关联数组返回”,而我正在寻找特定列的输出(例如 ['name '])。
  • 能否请您编写代码以获得所需的结果?
【解决方案2】:

首先,这段代码:

while($row=mysqli_fetch_array($data))
{
    echo $row['name'];
}

不等于:

$row=mysqli_fetch_array($data);
echo $row['name'];
echo $row['name'];
echo $row['name'];
echo $row['name'];
echo $row['name'];
echo $row['name'];

而是类似于(伪代码):

$row = mysqli_fetch_array($data);
if (!$row) return; //break the loop
echo $row['name'];

$row = mysqli_fetch_array($data);
if (!$row) return; //break the loop
echo $row['name'];
...

您可以使用多个mysqli_fetch_array() 调用来实现您所需要的,但还有其他方法可以实现它。其中之一是mysqli_fetch_all() 的使用。两者的工作方式相似,但mysqli_fetch_all() 返回一个包含您从查询中收到的所有结果的数组,而不是一次一个结果。 现在,它返回一个数组数组,所以要访问它,而不是:

$row['name'];

你需要使用:

$row[ROW_NUMBER]['name']
//example
$row[0]['name']

例子:

1) mysqli_fetch_array()

$row = mysqli_fetch_array($data);
echo $row['name']; //output name from the first row
$row = mysqli_fetch_array($data);
echo $row['name']; //output name from the second row

2)mysqli_fetch_all()

$row = mysqli_fetch_all($data);
echo $row[0]['name']; //output name from the first row
echo $row[1]['name']; //output name from the second row

【讨论】:

  • 你的意思是说,我必须使用,mysqli_fetch_array($data);回声 $row[0]['name']; mysqli_fetch_array($data);echo $row[1]['name'];?
  • 使用 mysqli_fetch_array($data);echo $row['name']; mysqli_fetch_array($data);echo $row['name'];但我遇到了一个错误。
  • 您忘记将mysqli_fetch_array 结果添加到$row;
  • $row=mysqli_fetch_array($data);回声 $row['name']; mysqli_fetch_array($data); echo $row['name'];--->仍然没有得到输出。用了mysqli_fetch_assoc(),还是没有输出。
  • @TimothySmith 请首先检查数组中的内容,例如 echo "
    ";打印_r($行);死;
【解决方案3】:

您可以使用mysqli_fetch_all 获取数组中的所有数据,但您可能需要使用foreach 进行进一步操作。

$con=mysqli_connect("localhost", "root", "", "student_details");
$data=mysqli_query($con,"select * from `registration`");
$row = mysqli_fetch_all($data, MYSQLI_ASSOC);

echo "<pre>"; print_r($row); die;
// Will show all data coming in $row as Array

为了进一步处理,您可能需要像下面这样使用 foreach:

foreach ($row as $item) {
    print_r($item);  // see what your item contains
}

【讨论】:

  • 我的朋友在第一个代码 sn-p 之前得到了输出,但我想了解如何从数组数组 $row 中获取每条记录?
  • 哦,不错..实际上即使您使用 mysqli_fetch_all 将所有数据作为数组获取,您也需要再次使用 foreach 循环将其作为数组处理。
  • 意思是说你可以跳过一个循环(while循环)但需要添加另一个..哈哈
  • 循环是必需的,因为您正在处理多个项目并且要对它们进行处理或采取任何行动,您必须使用它,亲爱的朋友 :)
  • 是的,你也可以在没有 foreach 循环的情况下通过获取总行数来做到这一点,但是你可以使用 $item[0]['name'],$item[1]['name '] 这不是正确的做法。
猜你喜欢
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多