[英]php while loop does not work with user-defined function
这样while
循环可以正常工作:
$results = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id);
while($data = mysqli_fetch_array($results)) {
echo '<tr>
<td>' . $data['name'] . '</td>
<td>' . $data['date'] . '</td>
</tr>'
}
但是,它不希望使用用户定义的功能。 它只是无限循环第一行:
function camp_data() {
global $user_id;
$query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id");
return (mysqli_fetch_array($query));
}
while($data = camp_data()) {
echo '<tr>
<td>' . $data['name'] . '</td>
<td>' . $data['date'] . '</td>
</tr>'
}
当我执行print_r(mysqli_fetch_array($results))
和print_r(camp_data())
-两者都返回绝对相同的数组。 怎么了
无论您从外部调用该函数多少次,它都只会在第一行执行mysqli_fetch_array()
。 第二次调用该函数(在外部循环的第二次迭代中)将不知道该函数是在之前执行的,因此不会继续进行下一行。 另外,在数组上进行while循环并不是您的最佳选择,这可能会导致无限循环。
您必须遍历函数中的结果并构建它们的数组。 返回mysqli_fetch_array不会循环。
while($data = mysqli_fetch_array($results)) {
$rows[] = $data;
}
return $rows
然后在函数上执行foreach()
:
foreach (camp_data() as $data) {
echo '<tr>
<td>' . $data['name'] . '</td>
<td>' . $data['date'] . '</td>
</tr>'
}
在每次交互中,您都调用camp_data()中的所有代码,而不仅仅是最后一行,因此请重构它:
function camp_data($query) {
return (mysqli_fetch_array($query));
}
//execute query only once
$query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id");
//fetch result row by row
while($data = camp_data($query)) {
echo '<tr>
<td>' . $data['name'] . '</td>
<td>' . $data['date'] . '</td>
</tr>'
}
如您所见,在这种情况下,方法camp_data只是mysqli_fetch_array的简单包装,因此可以将其替换为mysqli_fetch_array
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.