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

如何实现网站访客计数器24小时自动清零?代码问题排查求助

问题排查与修复方案

你的计数器无法在24小时后清零,核心原因是当前统计逻辑计算的是「过去滚动24小时」的访问量,而非「自然日(当日00:00-23:59)」的访问量。比如当前是10月5日14:00,代码会统计10月4日14:00到10月5日14:00的所有访问记录;到15:00时,统计范围又会变成10月4日15:00到10月5日15:00,数据自然会持续递增,不会在每日零点清零。

修复后的统计逻辑代码

直接按自然日筛选数据,推荐两种实现方式:

方式一:用MySQL DATE函数简化筛选

Today Visitors:
<?php
// 统计当日(自然日)的访问总量
$result = $mysqliCounter->query('SELECT COUNT(*) as today_count FROM views WHERE DATE(time) = CURDATE()');
$row = $result->fetch_assoc();
echo $row['today_count'];
?>

方式二:明确指定当日时间范围(更严谨,适合有时间精度要求的场景)

同时用预处理语句规避潜在的SQL注入风险:

Today Visitors:
<?php
$todayStart = date("Y-m-d 00:00:00");
$todayEnd = date("Y-m-d 23:59:59");

// 准备预处理语句
$stmt = $mysqliCounter->prepare('SELECT COUNT(*) as today_count FROM views WHERE time BETWEEN ? AND ?');
$stmt->bind_param('ss', $todayStart, $todayEnd);
$stmt->execute();

$result = $stmt->get_result();
$row = $result->fetch_assoc();
echo $row['today_count'];

// 关闭语句释放资源
$stmt->close();
?>

额外优化建议

你的插入数据代码可以简化:如果id字段是自增主键,不需要手动传入NULL,直接省略该字段即可:

<?php
$mysqliCounter = new mysqli("localhost","User","pass","website_db");

if ($mysqliCounter->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqliCounter->connect_error;
    exit();
}

// 省略自增主键id,数据库会自动生成
$mysqliCounter->query('INSERT INTO `views` (`time`) VALUES (CURRENT_TIMESTAMP)');
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:30:26