我正在使用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
}
第三,您应该真正考虑使用mysqli
或PDO
而不是mysql_*
函数,因为这些已被弃用。