首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测行是否在x秒前插入到数据库中

问如何检测行是否在x秒前插入到数据库中
EN

Stack Overflow用户
提问于 2011-12-28 07:54:47
回答 3查看 1.5K关注 0票数 0

基本上,我正在开发一个垃圾邮件检测系统,我想要检测是否在x秒之前插入了一行。X可能是5秒,所以我想看看是否在不到5秒之前向表中插入了一行。

出于示例目的,表名可以是my_table。这是我想出来的..。

代码语言:javascript
复制
$spam_validate = mysql_query("select * FROM my_table WHERE date_time < '3'");

然后我会做..。

代码语言:javascript
复制
    if (mysql_num_rows($spam_validate)==0) {
    //keep going
    } else {
    echo 'Spam was detected';
    }

如果你们中的任何人能在这里给我指出正确的方向,我显然是不正确的,所以非常感谢任何帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-28 07:56:58

您需要在该表中有一个时间戳字段(可以是DATETIME类型),它是在插入行时设置的。

代码语言:javascript
复制
INSERT INTO foo (spam, eggs, timestamp) VALUES (42, 88, NOW())

然后,您可以针对它进行选择。这个查询应该可以工作。

代码语言:javascript
复制
SELECT * FROM foo WHERE timestamp BETWEEN (NOW() - INTERVAL 5 SECOND) AND NOW()

注意DATETIME算法,它类似于直接使用DATEADD。

票数 3
EN

Stack Overflow用户

发布于 2011-12-28 08:04:26

在数据库中插入一个时间戳,然后在接受用户输入时,获取时间戳并检查他们的最后一次post时间加上X秒(或者节流,也许是更好的词)是否小于或等于当前的时间戳。

下面是一个伪代码示例:

代码语言:javascript
复制
X = post_limit;
if((last_post_time + X) <= current_time)
{
    allow_to_post;
}
else
{
    do_not_allow_to_post;
}

下面是我在imageboard软件中使用的一段代码,它可能也会为您指明正确的方向:

代码语言:javascript
复制
<?php
$ip = $_REMOTE['SERVER_ADDR']; // client's IP address
$sql = "SELECT time FROM spam WHERE ip = '$ip' LIMIT 1";
$query = mysql_query($sql);
if(0 < mysql_num_rows($query))
{
    while($result = mysql_fetch_assoc($query))
    {
        if($result['time'] < $time)
        {
            $sql = "DELETE FROM spam WHERE ip = '$ip'";
            $return_val = mysql_query($sql);
        }
    }
}
else
{
    $sql = "INSERT INTO spam (ip,time) VALUES ('$ip','$time');";
    $return_val = mysql_query($sql);
}
?>
票数 1
EN

Stack Overflow用户

发布于 2011-12-28 08:04:47

您的表应该有一个timestamp类型的列(我们称之为inserted_at)。插入查询将如下所示:

代码语言:javascript
复制
INSERT INTO tbl (inserted_at, somecol, someothercol) VALUES (NOW(), 'whatever', 76)

...and你的校验码看起来像这样

代码语言:javascript
复制
$interval = 5;
$sql = "SELECT count(*) AS denied FROM tbl WHERE inserted_at > NOW() - $interval";
$spam_validate = mysql_fetch_array(mysql_query($sql));

if ($spam_validate['denied']) {
  echo 'Spam was detected';
} else {
  // keep going
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8650496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档