求助:如何实现筛选3天及以上未登录用户的功能?代码无法生效
解决3天及以上未登录用户筛选问题
你的代码存在两处关键问题导致无法正确筛选目标用户,以下是针对性修正方案:
1. SQL查询的语法错误
原SQL中用单引号包裹last_active字段名,MySQL会将其识别为字符串常量而非字段引用,同时日期计算写法可优化为更标准的格式:
// 修正后的SQL查询,新增未活跃天数计算 $findActivity = mysqli_query($conn, "SELECT *, DATEDIFF(CURRENT_TIMESTAMP, last_active) AS inactive_days FROM users WHERE last_active < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)");
这里用DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)精准获取3天前的时间节点,通过DATEDIFF直接计算用户未活跃的天数,方便后续页面展示。
2. 未定义变量的问题
代码里的$inactivefor和$msg未赋值,需从查询结果或自定义逻辑中补充:
while($activeRow = mysqli_fetch_assoc($findActivity)){ $usr = $activeRow['username']; $inactivefor = $activeRow['inactive_days']; // 读取查询返回的未活跃天数 $msg = "超过3天未登录"; // 自定义状态提示 echo "<tr class='row100 body'>"; echo "<td class='cell100 column3'>$usr</td>"; echo "<td class='cell100 column3'>$inactivefor 天</td>"; echo "<td class='cell100 column3'>$msg</td>"; echo "</tr>"; }
额外优化建议
- 为避免SQL注入风险,建议使用预处理语句:
$stmt = $conn->prepare("SELECT *, DATEDIFF(CURRENT_TIMESTAMP, last_active) AS inactive_days FROM users WHERE last_active < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)"); $stmt->execute(); $result = $stmt->get_result(); while($activeRow = $result->fetch_assoc()){ // 后续处理逻辑 }
- 确认
last_active字段类型为DATETIME或TIMESTAMP,否则日期计算会失效。
内容的提问来源于stack exchange,提问作者Central
相关产品推荐
相关产品推荐

