You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在while($row)循环中直接使用MySQL fetch_assoc导致系统挂起,求原因分析

问题原因分析及解决办法

为什么系统会挂起?

你的代码里藏着一个无限循环,这直接导致CPU被占满,系统彻底挂起。咱们看这段关键代码:

$row = $result->fetch_assoc(); 
while($row){ 
    echo $row['id']; 
} 

你先获取了第一行数据赋值给$row,然后进入while循环——但循环里面完全没有更新$row的值!也就是说,$row永远是第一次拿到的那行数据,永远不会变成false(当没有更多数据时fetch_assoc()会返回false),循环就会一直跑下去,直到把系统资源耗干。

怎么解决?

有两种常用的修复方式,选哪种都可以:

方式一:把fetch_assoc()直接写到while条件里(最常用)

这样每次循环都会重新获取下一行数据,当没有数据时返回false,循环自动终止:

$query = "select * from table"; 
$result =$connect->query ($query); 
while($row = $result->fetch_assoc()){ 
    echo $row['id']; 
} 

方式二:在循环体内手动更新$row

如果你想保留先获取一行的写法,记得在循环最后重新获取下一行:

$row = $result->fetch_assoc(); 
while($row){ 
    echo $row['id']; 
    $row = $result->fetch_assoc(); // 关键:每次循环后更新$row
} 

另外顺便提一句:你的数据库连接代码里,应该是new mysqli()而不是new MySQL()(注意大小写,PHP的MySQLi扩展是小写开头的),不过这个不是导致系统挂起的原因,但不修正的话连接数据库会失败哦。

内容的提问来源于stack exchange,提问作者Rajesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:43:36