

新闻资讯
技术学院本文详解 php 分类页面中因逻辑错位导致“soon = '2'”商品仅显示一项的问题,通过修正 `while` 循环与条件判断的嵌套关系、消除重复取值、优化 sql 查询结构,实现多商品正确渲染。
在使用 PHP + MySQL 构建电商产品分类页时,一个常见却隐蔽的 Bug 是:用户选择某分类(如 Tech 或 Candles)后,页面仅渲染出一条 soon = '2' 的商品,其余同条件商品全部丢失。根本原因并非数据库数据异常,而是 PHP 控制流逻辑错误——具体表现为:if ($row["soon"] == "2") 判断被错误地置于 while 循环之外,或循环体内存在重复调用 fetch_assoc(),导致游标提前移动、跳过后续记录。
原始代码中存在两个关键缺陷:
✅ 正确做法是:确保所有商品渲染逻辑均位于 while ($row = $result->fetch_assoc()) { ... } 内部,且每个 $row 仅被读取一次。以下是重构后的健壮写法:
prepare($sql);
if ($category) $stmt->bind_param('s', $category);
$stmt->execute();
$result = $stmt->get_result();
if ($result && $result->num_rows > 0):
while ($row = $result->fetch_assoc()):
?>
= htmlspecialchars($row['productName']) ?>
@@##@@.jpeg"
alt="= htmlspecialchars($row['productName']) ?>"
height="150" width="120">
= number_format((float)$row['productPrice'], 2) ?> SEK
">
Sorry!';
echo 'No available products in this category.
';
endif;
$stmt->close();
$conn->close();
?>
? 关键改进说明:
⚠️ 重要提醒:
遵循以上结构,即可彻底解决分类页商品“只显示一个”的问题,并为后续功能迭代打下坚实基础。
" alt="PHP 中分类筛选仅显示一个商品的修复教程" >