PHP中mysql_fetch_object引发死循环问题求助
解决PHP代码无限循环并正确输出价格数据的问题
嘿,我来帮你搞定这个无限循环的问题!你的代码陷入死循环和输出异常有两个核心问题,我一步步给你拆解:
问题分析
无限循环的根本原因:
你只在循环外执行了一次$Alanadi = mysql_fetch_object($ACAlanadi);,之后的while循环一直复用这个已经获取到的对象,没有去请求下一条数据库记录。这就导致循环条件永远为真,程序一直重复输出同一个价格,陷入死循环。函数混用与废弃问题:
你混用了mysql_*和mysqli_*系列函数(最后用了mysqli_free_result,前面却是mysql_query),这是完全错误的。更重要的是,mysql_*系列函数早在PHP 5.5就被废弃,PHP 7+直接移除了,非常不推荐使用,存在安全隐患。
修正方案
方案1:临时修复原mysql_*代码(不推荐长期使用)
如果只是临时解决当前问题,你需要把获取下一条记录的操作放到while循环的条件里,同时修正结果集释放的对象:
<?php $DBAlanadi = "SELECT * FROM Alanadi"; $ACAlanadi = mysql_query($DBAlanadi); $TotalAlanadi = mysql_num_rows($ACAlanadi); if($TotalAlanadi != 0): // 每次循环都从结果集中获取下一条记录,直到没有数据时返回false终止循环 while($Fiyat = mysql_fetch_object($ACAlanadi)): echo '<a>'.$Fiyat->fiyat.'</a>'; endwhile; endif; mysql_free_result($ACAlanadi); // 释放的是查询结果集$ACAlanadi,不是单个记录对象 ?>
方案2:推荐使用mysqli面向对象写法(安全且兼容新版本PHP)
这是更规范、安全的写法,适配PHP 7+版本,同时避免废弃函数的问题:
<?php // 替换成你的数据库连接信息 $dbHost = 'localhost'; $dbUser = '你的用户名'; $dbPass = '你的密码'; $dbName = '你的数据库名'; // 建立数据库连接 $conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName); // 检查连接是否成功 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } $DBAlanadi = "SELECT * FROM Alanadi"; $ACAlanadi = $conn->query($DBAlanadi); // 检查是否有查询结果 if($ACAlanadi && $ACAlanadi->num_rows != 0): while($Fiyat = $ACAlanadi->fetch_object()): echo '<a>'.$Fiyat->fiyat.'</a>'; endwhile; endif; // 释放结果集并关闭连接 $ACAlanadi->free(); $conn->close(); ?>
关键说明
把mysql_fetch_object($ACAlanadi)(或mysqli版本的$ACAlanadi->fetch_object())放到while循环条件里,每次循环都会自动获取下一条记录:
- 当还有记录时,返回对象,循环继续执行;
- 当没有更多记录时,返回
false,循环自动终止,这样就不会出现无限循环了。
内容的提问来源于stack exchange,提问作者Abdulsamet Kalyoncu
相关产品推荐
相关产品推荐

