嗨所以我做了一个查询,当我尝试循环结果时,它会反复循环输出相同的变量。它不是一个不确定的循环,因为数据太难以判断它是否已经循环了正确的次数。我要做的是:从customers表中选择所有不同的customer_uid,其中start_cycle_uid(来自start_cycle表)具有相同的customer_home id和传入的相同start_date。所以我将得到每个客户中的一个属于该开始日期的customer_home。我得到的是同一个customer_uid的列表。我的逻辑错了吗?
$homeQuery=$DB->prepare("select distinct customer_uid from customers
where start_cycle_uid =
(select uid from start_cycles
where customer_home_uid=".$DB->quote_smart($_REQUEST['homeid'])."
and start=".$DB->quote_smart($_REQUEST['start']).")");
$homeResult=$DB->query($homeQuery);
$homeRow=$DB->fetchArray($homeResult);
if ($DB->numRows($homeResult) > 0) {
for ($x=0; $x<=$DB->numRows($homeResult); $x++){
echo $homeRow['customer_uid']."<br />";
}
}
更新:当前代码如下所示:
$homeQuery=$DB->prepare("select distinct customer_uid from customers
where start_cycle_uid =
(select uid from start_cycles
where customer_home_uid=".$DB->quote_smart($_REQUEST['homeid'])."
and start=".$DB->quote_smart($_REQUEST['start']).")");
$homeResult=$DB->query($homeQuery);
while($row = $DB->fetchArray($homeResult))
{
echo $row['customer_uid']."<br />";
}
现在陷入无限循环。
答案 0 :(得分:1)
你的逻辑是多余的。通常的做法是在存在行时迭代 - 然后您不需要检索行数。它就像
while($row = $DB->fetchArray($homeResult))
{
//now you have $row as actual fethed DB row
}
- 这将有效,因为赋值将返回与$DB->fetchArray($homeResult)
相同的内容 - 例如false
当没有更多行时 - 这将导致循环结束。
答案 1 :(得分:0)
要获得下一行,您必须在循环内移动$homeRow = $DB->fetchArray($homeResult);
。现在它只获得第一行,因为你只调用一次。
将$DB->numRows($homeResult)
放入变量以避免计算每次循环运行也是个好主意。