PHP遍历MySQL查询结果时计数器异常问题求助
帮你排查循环计数器的问题
嘿,我来帮你揪出这个计数器的问题!从你给出的代码片段来看,虽然while循环没写完,但我可以梳理几个常见的坑,帮你定位问题所在:
可能的问题点
条件判断逻辑出错
你提到要“满足特定条件时计数器自增”,但目前的代码里没看到这个条件判断的部分。如果条件写得有问题——比如把比较运算符==/===写成了赋值运算符=,或者条件范围(比如日期判断)搞错了,计数器肯定不会按预期变化。比如你用到了$tomorrows_date和$ends_date,如果是判断数据库里的日期字段是否在这个区间,得确保日期格式完全匹配,比较逻辑也正确。循环遍历结果集的方式不对
你用了while循环,但得确保正确取出查询结果的每一行。比如如果是mysqli扩展,应该写成while($row = $querydone->fetch_assoc())来逐行获取数据;如果是PDO,可能需要先把结果转成数组再用foreach遍历。要是没正确取出行数据,条件判断根本没机会触发,计数器自然不会动。另外你说本来想用foreach循环,是不是混淆了两种遍历方式?不小心重置了计数器
你把$counter = 0放在循环外面是对的,但要检查循环内部有没有不小心重新赋值$counter(比如写了$counter = 0),要是每次循环都清零,结果肯定不符合预期。
修正后的示例代码
假设你的条件是判断数据库中的datum字段在$tomorrows_date到$ends_date之间,这里给出一个完整的示例:
$building = 5; $todaysdate = date("Y-m-d"); $tomorrows_date = date("Y-m-d", strtotime($todaysdate . "+1 days")); $ends_date = "2018-04-30"; $counter = 0; $query = "SELECT * FROM objekt WHERE vrsta_objekta = '2' ORDER BY sifra ASC"; $querydone = $db->query($query); // 逐行遍历查询结果 while($row = $querydone->fetch_assoc()) { // 替换成你的实际条件 if($row['datum'] >= $tomorrows_date && $row['datum'] <= $ends_date) { $counter++; // 满足条件时计数器自增 } } // 输出结果验证 echo "最终计数器值:" . $counter;
排查小技巧
- 先手动执行SQL语句,确认返回的结果集是你预期的30到110的数字,确保数据本身没问题。
- 在循环里加调试输出,比如
echo "当前行sifra:" . $row['sifra'] . ",是否符合条件:" . ($row['datum'] >= $tomorrows_date ? "是" : "否") . "<br>";,直观看到每一步的执行情况。 - 检查日期格式:确保数据库里的日期字段和你生成的
Y-m-d格式完全一致,不然日期比较会失效。
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

