簡體   English   中英

x秒前如何檢測行是否已插入數據庫

[英]How can I detect if a row was inserted into the database x seconds ago

基本上,我正在研究垃圾郵件檢測系統,我想檢測是否在少於x秒之前插入行。 x可能是5秒,所以我想查看是否在不到5秒之前將一行插入到表中。

用於示例目的表名稱可以是my_table 這就是我想出的...

$spam_validate = mysql_query("select * FROM my_table WHERE date_time < '3'");

那我就做...

    if (mysql_num_rows($spam_validate)==0) {
    //keep going
    } else {
    echo 'Spam was detected';
    }

如果你們中的任何一個可以為我指明正確的方向,我顯然是不正確的,因此非常感謝您的幫助。

該表中需要一個時間戳字段(可以是DATETIME類型),該字段是在您插入行時設置的。

INSERT INTO foo (spam, eggs, timestamp) VALUES (42, 88, NOW())

然后您可以選擇反對。 此查詢應該工作。

SELECT * FROM foo WHERE timestamp BETWEEN (NOW() - INTERVAL 5 SECOND) AND NOW()

請注意DATETIME算法,這與直接使用DATEADD相似。

將時間戳記插入數據庫中,然后在從用戶那里獲取輸入信息時,抓住時間戳記並檢查其上次發布時間加上X秒(或者說節氣,也許是個更好的詞)是否小於或等於當前時間時間戳。

這是一個偽代碼示例:

X = post_limit;
if((last_post_time + X) <= current_time)
{
    allow_to_post;
}
else
{
    do_not_allow_to_post;
}

這是我在圖像板軟件中使用過的一小段代碼,也可能會為您指明正確的方向:

<?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);
}
?>

您的表應具有類型為timestamp的列(我們稱其為inserted_at )。 您插入查詢將如下所示:

INSERT INTO tbl (inserted_at, somecol, someothercol) VALUES (NOW(), 'whatever', 76)

...您的支票代碼看起來像

$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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM