我在函数中有一个MySQLi语句,如下所示:
function getTimeData($time) {
$con = mysqli_connect("domain:port", "user", "password", "dbname") or die (mysql_error());
$selectedDate = $_SESSION['date'];
$prepTimeData = mysqli_prepare($con, "SELECT * FROM `time` WHERE `date`=? AND `time`<=? AND `endTime`>=?");
$prepTimeData->bind_param("sss", $selectedDate, $time, $time);
$prepTimeData->execute();
$getTimeData = $prepTimeData->get_result();
return $getTimeData;
}
然后是while循环以迭代所有结果:
while ($data0800 = getTimeData("0800")->fetch_assoc()) {
?><tr><td><?php $data0800['first_name'];?></td>
<td><?php $data0800['riderage'];?></td>
<td><?php $data0800['ridinglevel'];?></td>
<td><?php $data0800['horse'];?></tr><?php
}
这将导致表无限扩大而实际上并未填充其应有的内容。但是,让该函数之外的语句工作正常。
答案 0 :(得分:2)
您调用以下代码;
while ($data0800 = getTimeData("0800")->fetch_assoc()) {
看起来足够公平吧?但是每次while循环时,都会调用该函数,这意味着将执行一个新查询,这又意味着它将永远不会到达末尾,因为将值重置为它找到的第一行,而不是每次循环都调用该函数,使用以下代码将函数调用与循环分离开,应该可以使它按预期工作,依次收集每一行;
$timedata = getTimeData("0800");
while ($data0800 = $timedata->fetch_assoc()) {
这是因为您只调用一次函数并将其结果存储在$timedata
变量中,而不是每次循环时都刷新查询和结果集