Php 向数据库添加数据,在一定时间后自动删除?

Php 向数据库添加数据,在一定时间后自动删除?,php,mysql,database,mysqli,timer,Php,Mysql,Database,Mysqli,Timer,所以,我在谷歌上搜索了很多关于这个话题的信息,但我就是找不到答案。所以,基本上,我正在寻找一个小网站,它将从HTML表单中提取信息,发送到数据库,然后在两个小时后,它将自动删除自己。我有一个基本的理论来解释它是如何工作的,但我不知道怎么做:我可以提取当前的时间和日期,再加上两个小时,然后把时间放在数据库中的“expires”列中。一旦时间是expires列中的时间,数据将从数据库中删除。抱歉,如果这是一个非常“noobish”的问题,我对使用PHP的数据库还是有点陌生 无论如何,任何帮助都将不胜

所以,我在谷歌上搜索了很多关于这个话题的信息,但我就是找不到答案。所以,基本上,我正在寻找一个小网站,它将从HTML表单中提取信息,发送到数据库,然后在两个小时后,它将自动删除自己。我有一个基本的理论来解释它是如何工作的,但我不知道怎么做:我可以提取当前的时间和日期,再加上两个小时,然后把时间放在数据库中的“expires”列中。一旦时间是expires列中的时间,数据将从数据库中删除。抱歉,如果这是一个非常“noobish”的问题,我对使用PHP的数据库还是有点陌生


无论如何,任何帮助都将不胜感激!谢谢

只需添加一列remove_time(
DATETIME
)并设置要删除该行的时间。而不是使用cron(配置取决于您拥有的webhosting)来运行此查询(可能作为PHP脚本的一部分):

从删除时间所在的表中删除
  • 尝试实现一个cron,该cron将在指定时间自动运行,以检查和删除在创建的当前时间少2小时的行

  • 关于如何实现cron,请查看Skilldrick的回答

  • 多谢各位
    :)

    您可以使用命令行选项--event scheduler=ON或在MySQL配置文件(Windows上的my.cnf或my.ini)中设置event_scheduler=ON,确保启动MySQL时启动调度程序。 在mysql中运行此查询语句

    SET GLOBAL event_scheduler = ON;
    
    使用以下命令创建一个mysql事件调度器-这将类似于Cron作业,但实际上它是特定时间间隔上的一个mysql触发器。这是从mysql服务器触发的

    CREATE EVENT e_hourly
     ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Clears out sessions table each hour.'
    DO
      DELETE FROM table_name WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(remove_time) > 120
    


    请原谅我的解释——我自己刚才已经实现了这一点,并且成功了

    您可以向表中添加一个新的timestamp列,该列将自动添加创建行时的时间戳,如下所示

    CREATE TABLE t1 (
       #your existing columns defined as before + this new column
       ts_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
    现在,每次在这个表上创建一行时,MySQL都会在创建该行时进行所有记录工作

    假设您可能无法在主机上创建cron作业,则可以在现有站点代码中最明显的位置添加删除代码来执行删除

    // remove old stale data
    $sql = "DELETE FROM user
            WHERE ts_created < DATE_ADD(NOW(),INTERVAL -2 HOUR)";
    
    if ( ! $mysqli->query($sql) ) {
        // log $mysqli->error somewhere
    }
    
    //删除旧的过时数据
    $sql=“从用户删除”
    其中ts_创建了query($sql)){
    //在某处记录$mysqli->错误
    }
    
    虽然cron作业乍一看似乎是个好主意,但为了确保此表上的内容始终准确,您必须每30秒运行一次,甚至可能更频繁。这将妨碍此表上的其他活动,如果站点繁忙,这可能是一个问题,如果站点不繁忙,您将在大部分时间不必要地运行cron


    如果您在向用户提供此信息之前添加删除代码,至少它只会在需要时运行,并且您还可以确保在向用户提供数据时,表始终是准确的。

    您使用的是哪个数据库?只需使用cron任务,它将在>2小时内删除每一个数据。您可以尝试使用克朗。我认为这将是一个最好的解决方案。@bfontaine如果你指的是软件,我使用的是PHPMyAdmin,否则我猜它只是MySQL…-使用mysql事件调度程序我在cron.php中放了什么?编辑:我想我把删除部分放在那里了。。。无论如何,所以我应该将创建的时间和当前时间添加到我的表中?只在数据库中添加创建的时间。current_time变量将在php中设置-->
    $current_time=time()
    这将返回Unix时间戳。下一步是在当前时间戳之前2小时计算Unix时间戳,例如
    $temp\u timestamp
    。最后,删除创建时间小于
    $temp\u时间戳的字段。如果此答案对您有帮助,请将我的答案标记为正确。是的,我可能无法使用cron作业,因为我的web主机只允许一小时或更长时间使用一次。。。唯一的问题是,这看起来很复杂。实际上,不太复杂,但我的桌子已经用PHPMyAdmin做了。所以,如果我只是添加一个当前时间戳,它是否可以在每次添加新数据时设置,这就是将要发生的事情。您可能需要手动清除表更改之前存在的行。好的,谢谢!你能给我一个确切的代码,我应该放在哪里?(对不起,我是一个noob)我想你的意思是PHP代码执行删除。我不能不了解你现有的PHP代码。
    
    // remove old stale data
    $sql = "DELETE FROM user
            WHERE ts_created < DATE_ADD(NOW(),INTERVAL -2 HOUR)";
    
    if ( ! $mysqli->query($sql) ) {
        // log $mysqli->error somewhere
    }