我下面有我的代码。我有一个函数“ 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++;
}
?>
下面是我的桌子
这是我的结果
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
答案 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个制表符)。我也强烈建议您也这样做(可能从此处编辑主题开始)。