检查查询是否DateTime为X秒前


Check Query for DateTime being X seconds ago

我正在使用PHP和MySQL为我最近创建的论坛创建一个洪水过滤器,我对此进行了研究,但结果很少,只有一个可能使我进一步实现我的决议。

代码

$overview_threads = mysql_query("SELECT * FROM `forum_posts` WHERE `author`='".$_SESSION['username']."' AND TIMESTAMPDIFF(SECOND, `created`, now()) <= 20");

代码试图选择用户在20秒或更短的时间间隔内创建的线程,然后执行if语句以阻止用户在该时间内发布。

我该怎么做呢?

首先,您可能应该使用DATE_SUB(),因为它将更加索引友好(当然您需要在created上创建索引)

SELECT * FROM `forum_posts`
WHERE `author` = ?
AND `created` >= DATE_SUB(NOW(), INTERVAL 20 SECONDS)

第二,为了确定是否有记录,您必须查看结果集。

$result = mysql_query($query); // query is that shown above
if (false === $result) {
    echo mysql_error();
} else if (mysql_num_rows($result) > 0) {
   // you found a match
}

第三,您应该真正考虑使用mysqliPDO而不是mysql_*函数,因为这些已被弃用。