PHP Mysql 获取日期范围内的统计信息

标签 php mysql statistics

我正在获取数据库中的扫描计数。时间字段是mysql时间戳(2011-10-20 14:15:12)。我有一个功能可以让我设置一个时间范围,比如 30 天、60 天等等……这已经工作了好几个星期了。然后我才注意到它坏了。

function getScans($timeframe = 0)
{
    if ($timeframe != 0) { 
        $query = 'SELECT COUNT( * ) 
            FROM stats 
            WHERE time <= curdate( )+1 
            AND time >= curdate( )-' . ($timeframe - 1);
    } else {
        $query = 'SELECT COUNT( * ) 
            FROM stats';
    }

    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    return $row[0];
}

我知道你们以前都听过这个,但上周它完全起作用了。我今天回去发现当 $timeframe 不为 0 时,它不再起作用。如有任何帮助,我们将不胜感激。

最佳答案

问题是这样的:curdate( )+1 产生 20111131 (到 2011-11-30)不是我相信你所期望的,2011- 12-01,后面的curdate()调用也是如此。它可能工作得很好,因为本月早些时候,调用产生了正确的日期,并且 MySQL 接受了格式,但现在它无法对“不可能”的日期发出警报。临近下个月,事情开始发生变化。

查询应该重写为:

SELECT
  COUNT(*)
FROM `stats`
WHERE `stats`.`time` <= DATE_ADD(NOW(), INTERVAL 1 DAY)
  AND `stats`.`time` >= DATE_SUB(NOW(), INTERVAL $timeframe DAY)

你可以这样做:

function getScans($timeframe = 0)
{
    if ($timeframe != 0) { 
        $query = 'SELECT COUNT( * ) 
            FROM stats 
            WHERE time <= DATE_ADD(NOW(), INTERVAL 1 DAY) 
            AND time >= DATE_SUB(NOW(), INTERVAL ' . ($timeframe - 1) . ' DAY)';
    } else {
        $query = 'SELECT COUNT( * ) 
            FROM stats';
    }

    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    return $row[0];
}

但如果 $timeframe 可以由用户等提供,这不是最安全的方法。相反,您应该考虑使用类似的东西:

$query = sprintf ('SELECT
  COUNT(*)
FROM `stats`
WHERE `stats`.`time` <= DATE_ADD(NOW(), INTERVAL 1 DAY)
  AND `stats`.`time` >= DATE_SUB(NOW(), INTERVAL %d DAY)',
mysql_real_escape_string ($timeframe, $connection_handle));

或者,更好的是,在将用户输入添加到 SQL 语句之前,搜索 SO 以获取有关清理用户输入的提示。

关于PHP Mysql 获取日期范围内的统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8323337/

相关文章:

statistics - 如何知道何时使用特定类型的相似度索引?欧几里德距离与 PIL 逊相关性

名称中带点的 PHP GET url 参数

javascript - 有没有办法改变http请求、响应位置?

php - 如何限制公共(public) API 的速率?

php - 如何让 PHP 和 Node.js 中的 hash 具有相同的值?

javascript - 希望在互联网出现故障时离线存储表单数据并在互联网活跃时提交

MySQL 提高查询性能

mysql - 我得到 Cannot add or update a child row : a foreign key constraint fails error

python - 2 KS 测试示例 - 似乎有问题

r - 如何在 R 的条形图中对 X 轴进行排序?