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

如何检测即将过期产品并统计行数?现有PHP查询有误

修复即将过期产品统计的PHP代码问题

原代码存在多处逻辑错误和效率问题,无法正确统计即将过期(过期前3天内)的产品数量,以下是问题分析和修正方案:

原代码的核心问题

  • 循环内重复执行SQL查询,覆盖了初始的$result变量,导致循环逻辑混乱甚至提前终止
  • SQL查询条件完全错误:未关联产品的expiry_date字段,仅用循环中单个产品计算出的$expiringdate做全局筛选,根本无法统计所有符合条件的产品
  • 日期处理冗余且有风险:用date($row['expiry_date'])转换数据库日期可能引发格式错误,应直接使用原生日期对象处理
  • 未做参数绑定,存在SQL注入风险

修正后的代码

<?php
include('../connect.php');

// 直接通过SQL统计符合条件的产品:筛选距离过期≤3天且未过期的记录
$stmt = $db->prepare("SELECT COUNT(*) AS expiring_count FROM rawprod 
                      WHERE CURDATE() >= DATE_SUB(expiry_date, INTERVAL 3 DAY) 
                      AND expiry_date >= CURDATE()");
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$rowcountEXP = $row['expiring_count'];
?>

<div style="text-align:center;">
    Expiring Raw Product: <font style="color:green; font:bold 22px 'Aleo';">[<?php echo $rowcountEXP; ?>]</font>
</div>

代码说明

  • 利用MySQL内置日期函数直接在数据库层面完成筛选,比PHP循环遍历所有数据的效率高很多
  • 精准匹配需求逻辑:当前日期≥过期日-3天,且过期日≥当前日期(确保产品未过期),完美覆盖示例中11-25过期、11-22即视为即将过期的场景
  • 通过COUNT(*)直接获取统计结果,无需遍历数据行,代码更简洁
  • 避免了变量覆盖、冗余计算等问题,逻辑更可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:50:46