【问题标题】:Add data to a database, automatically remove after a certain time?将数据添加到数据库,一定时间后自动删除?
【发布时间】:2015-11-03 10:24:25
【问题描述】:

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

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

【问题讨论】:

  • 您使用的是哪个数据库?
  • 只需使用 cron 任务,它将删除所有数据 > 2 小时。
  • 你可以试试cron。我认为这将是一个最佳解决方案。
  • @bfontaine 如果你指的是软件,我使用的是 PHPMyAdmin,否则我猜它只是 MySQL...

标签: php mysql database mysqli timer


【解决方案1】:

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

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
}

虽然 cron 作业乍一看似乎是个好主意,但为了确保此表上的内容始终准确,您必须每 30 秒或更频繁地运行一次。这会妨碍此表上的其他活动,如果站点很忙,这可能是一个问题,如果它不忙,您将只是在大多数时间不必要地运行 cron。

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

【讨论】:

  • 是的,我可能不能使用 cron 作业,因为我的虚拟主机只允许一个小时或更长时间一次......唯一的问题是,这看起来很复杂......
  • 其实并没有复杂,但我的表格已经在 PHPMyAdmin 中制作好了。所以如果我只是添加一个当前时间戳,是否可以在每次添加新数据时设置它
  • 是的,这就是将要发生的事情。您可能需要手动清除表更改之前存在的行
  • 好的,谢谢!你能告诉我我应该放的确切代码以及放在哪里吗?(对不起,我是菜鸟)
  • 我假设您的意思是执行 DELETE 的 PHP 代码。好吧,我不能不了解您现有的 PHP 代码。
【解决方案2】:

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

SET GLOBAL event_scheduler = ON;

使用以下方法创建一个 mysql 事件调度程序 - 这将类似于 Cron Job,但实际上它是特定时间间隔的 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

http://dev.mysql.com/doc/refman/5.1/en/create-event.html
http://www.sitepoint.com/how-to-create-mysql-events/

请原谅我的解释 - 我自己刚刚实现了这个并且它有效。

【讨论】:

  • 如果此答案对您有帮助,请务必将我的答案标记为正确。
【解决方案3】:

只需添加一列 remove_time (DATETIME) 并设置您希望删除该行的时间。比使用 cron(配置取决于您拥有的虚拟主机)来运行此查询(可能作为 PHP 脚本的一部分):

DELETE FROM table WHERE remove_time <= NOW()

您可以将 cron 配置为每分钟运行一次(或更少/更多,取决于您的需要)。

【讨论】:

    【解决方案4】:
    1. 尝试实现一个 cron,它会在指定时间自动运行,以检查和删除 created_at 小于 current_time 的行> 2 小时。

    2. 关于如何实现 cron,请查看 Skilldrick 的 回答 here

    谢谢 :)

    【讨论】:

    • 在 cron.php 里面放什么?
    • 编辑:我想我把删除部分放在那里......无论如何,所以我应该将 created_at 和 current_time 添加到我的表中?
    • 在您的数据库中仅添加 created_atcurrent_time 变量将在 php 中设置 --> $current_time = time() ; 这将返回 Unix 时间戳。下一步是计算 unix 时间戳 2 小时 在当前时间戳之前,比如$temp_timestamp。最后,删除 created_at 小于 $temp_timestamp 的字段。
    猜你喜欢
    • 2013-12-17
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2014-03-04
    • 2019-06-22
    • 1970-01-01
    • 2023-03-06
    • 2021-01-28
    相关资源
    最近更新 更多