如何在数据进入表后 24 小时自动从 mysql 表中删除数据行?

4 php mysql jobs

例如,我有一个数据输入程序,我想在输入数据 1 天后自动删除我的数据。我怎么做?
有人可以用代码解释一下吗?

Create.php 将这些值发送到服务器

<form action="" method="post" enctype="multipart/form-data">
    <input type="text" name="name_portofolio">
    <textarea name="info_portofolio"></textarea>
    <input type="file" accept="image/*"  name="picture_portofolio"> 
    <button type="submit" name="submit">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)

函数-add.php

<?php

function create_data($name_portofolio, $info_portofolio,
                  $picture_portofolio)
{
   global $connect;
   $name_portofolio = mysqli_real_escape_string($connect, $name_portofolio);
   $info_portofolio = mysqli_real_escape_string($connect, $info_portofolio);


   $filePath = "picture/".basename($picture_portofolio["name"]);
   move_uploaded_file($picture_portofolio["tmp_name"], $filePath);

   $query = "INSERT INTO portofolio 
         (name_portofolio, info_portofolio, picture_portofolio) 
          VALUES ('$name_portofolio', '$info_portofolio', '$filePath')";

   if(mysqli_query($connect, $query))
   {
      return true;
   }else{
      return false;
   }
  } // create_data
Run Code Online (Sandbox Code Playgroud)

数据库文件

<?php
$host = "127.0.0.1";
$user = "root";
$password = "";
$db = "wherco";

// create connection
$connect = new mysqli($host, $user, $password, $db);

// check connection
if($connect->connect_error) {
    die("connection failed : " . $connect->connect_error);
} else {
    // echo "Successfully Connected";
}

?>
Run Code Online (Sandbox Code Playgroud)

谢谢 。

Ale*_*der 8

尝试使用常规事件。首先,使用启用事件调度程序

SET GLOBAL event_scheduler = ON;
Run Code Online (Sandbox Code Playgroud)

之后,您可以创建将检查行创建时间的事件。例如

CREATE EVENT recycling ON SCHEDULE EVERY 1 HOUR ENABLE 
  DO 
  DELETE FROM MyTable WHERE `timestamp_column` < CURRENT_TIMESTAMP - INTERVAL 24 HOUR;
Run Code Online (Sandbox Code Playgroud)

如果表中没有带有行创建时间戳的列,那么您可以创建触发器,将当前时间戳和插入的行标识符插入辅助表。

CREATE TRIGGER logCreator AFTER INSERT ON MainTable
  FOR EACH ROW 
  INSERT INTO LogTable (MainID, Created) VALUES(NEW.id, CURRENT_TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)

然后您可以使用此日志获取特定时间之前创建的主表的键。

delimiter |
CREATE EVENT cleaner ON SCHEDULE EVERY 1 HOUR ENABLE 
  DO 
  BEGIN
    DECLARE MaxTime TIMESTAMP;
    SET MaxTime = CURRENT_TIMESTAMP - INTERVAL 24 HOUR;
    DELETE FROM MainTable 
    WHERE id IN (SELECT MainID FROM LogTable WHERE Created < MaxTime);
    DELETE FROM LogTable WHERE LogTable.Created < MaxTime;
  END |
  delimiter ;
Run Code Online (Sandbox Code Playgroud)