0

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

这是代码

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

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

我该怎么做?

4

1 回答 1

1

首先,您可能应该使用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
}

第三,您应该真正考虑使用mysqliorPDO代替mysql_*函数,因为这些已被弃用。

于 2013-05-08T23:54:57.150 回答