PHP函数数组返回一个记录多次

时间:2018-11-19 09:17:10

标签: php mysql

我下面有我的代码。我有一个函数“ getdet”,它返回记录数组,但是我无法打印所有记录,而仅显示第一个记录的代码可能会计时。请帮助解决此问题。

<?php

function getdet($qry){
global $con;
$Selecting=mysqli_query($con,$qry);
 $Fetch=mysqli_fetch_array($Selecting);
 return $Fetch;
 }
$qry="SELECT * FROM `tbs_employee` WHERE EmpId='1' limit 1";
$GetData=getdet($qry);
$i=0;
while($GetData){
echo $i."-".$GetData['EmpId'].":".$GetData['EmpName']."<br>";
$i++;
}
?>

下面是我的桌子

enter image description here

这是我的结果

0-1:Fst Employee
1-1:Fst Employee
2-1:Fst Employee
3-1:Fst Employee
4-1:Fst Employee
5-1:Fst Employee
6-1:Fst Employee
.
.
.
infinity

4 个答案:

答案 0 :(得分:1)

您正在$Selecting=mysqli_query($con,$qry);函数中一次又一次地运行相同的查询(getDet),因此它将永远不会退出while循环:

while($GetData){

应该是:

$qry="SELECT * FROM `tbs_employee` WHERE EmpId='1' limit 1";
$Selecting=mysqli_query($con,$qry);
$i=0;
while($GetData = mysqli_fetch_array($Selecting)){
  echo $i."-".$GetData['EmpId'].":".$GetData['EmpName']."<br>";
  $i++;
}

mysqli_fetch_array将返回null,如果返回所有结果,则while循环可以退出。

答案 1 :(得分:0)

在查询中,您按ID过滤了雇主 WHERE EmpId='1' limit 1

如果要获取所有记录,请删除此语句。

答案 2 :(得分:0)

好吧,您的函数仅返回数据。这是正确的方法:

<?php
function getdet($qry){
global $con;
$Selecting=mysqli_query($con,$qry);
  while($row=mysqli_fetch_array($Selecting, MYSQLI_ASSOC)){
    $Fetch[] = $row;
  }
 return $Fetch;
 }
$qry="SELECT * FROM `tbs_employee`";
$GetData=getdet($qry);
foreach($GetData as $i=>$row){
  echo $i."-".$row['EmpId'].":".$row['EmpName']."<br/>";
}
?>

答案 3 :(得分:0)

发生这种情况的原因是,您创建了一个无限循环。使用方法与“ true”相同,只是一个小例子:

$example = 'some value';
if ($example) {
    echo 'You will see this echo!';
}

如果我们现在更进一步,你有一个while循环。但是您现在使用它的方式如上所述。换句话说,它总是正确的:

$example = 'some value';
while ($example) {
    echo 'You will see this echo! At least untill the server runs out of resources';
}

您拥有的就是在循环之前设置$GetData。这样,在循环运行了一个信号后,该值不会改变。您只需在片刻之前设置它的值,所以您永远不会移到下一行!

幸运的是,解决方案非常简单。我们需要为每个问题分配它。以下代码段是常见的实现方式:

while($GetData = getdet($qry)){
    // Now, after every run, we set $GetData to the next line
}

上一次运行时,mysqli_fetch_array函数返回null,因此您的函数也是如此,因此while循环停止。


Offtopic:我们有一些编码标准,这些标准使阅读代码更加容易。其中之一是缩进;如您所见,我的代码更容易阅读。例如,这是因为我在if语句中使用了4个空格(1个制表符)。我也强烈建议您也这样做(可能从此处编辑主题开始)。