PHP遍历SQL查询结果的while循环条件为false仍无限执行是什么原因?
问题原因及解决方案
你遇到的情况属于PDO结果集遍历的异常行为,优先从以下几个方向排查解决:
- 检查实际运行代码和贴出代码是否一致,重点确认while循环条件没有多余的逻辑:
如果你在while条件中额外加入了永远为真的判断,或是误用了运算符优先级,会导致条件判断失效。比如存在|| true这类写法时,即使fetch()返回false,整个条件表达式的结果仍然为true,循环会持续执行。 - 排查循环体内是否存在修改结果集的逻辑:
如果循环体中再次调用了execute()、closeCursor()这类会重置结果集游标状态的方法,会导致fetch()的返回逻辑异常。 - 确认PDO错误模式配置:
开启PDO异常模式排查是否有静默报错干扰结果返回,代码如下:$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - 优先使用更稳定的遍历方式规避该问题:
如果排查不到具体原因,可以改用fetchAll一次性读取所有结果后遍历,从根源上避免循环异常:
如果你使用的是PHP 5.4以上版本,也可以直接遍历PDOStatement对象:$request = $db->prepare("SELECT followerID FROM followers WHERE profile = ?"); $request->execute(array($_SESSION['id'])); $followers = $request->fetchAll(PDO::FETCH_ASSOC); foreach ($followers as $user) { var_dump($user); }foreach ($request as $user) { var_dump($user); }
内容的提问来源于stack exchange,提问作者Lpkr
相关产品推荐
相关产品推荐

