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

PHP中mysql_fetch_object引发死循环问题求助

解决PHP代码无限循环并正确输出价格数据的问题

嘿,我来帮你搞定这个无限循环的问题!你的代码陷入死循环和输出异常有两个核心问题,我一步步给你拆解:

问题分析

  1. 无限循环的根本原因:
    你只在循环外执行了一次$Alanadi = mysql_fetch_object($ACAlanadi);,之后的while循环一直复用这个已经获取到的对象,没有去请求下一条数据库记录。这就导致循环条件永远为真,程序一直重复输出同一个价格,陷入死循环。

  2. 函数混用与废弃问题:
    你混用了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:58