如何在24小时内将数据自动从mysql表中删除?

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

创建.php

<!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>

    <?php

    require_once "db.php";
    require_once "function-add.php";



    if( isset($_POST['submit']) ){

      $name_portofolio      = $_POST['name_portofolio'];
      $info_portofolio        = $_POST['info_portofolio'];
      $picture_portofolio  = $_FILES['picture_portofolio'];

      $tipe_file                                    = $_FILES['picture_portofolio'] ['type'];
        $tmp_file                               = $_FILES['picture_portofolio']['tmp_name'];
        $ukuran_file                        = $_FILES['picture_portofolio'] ['size'];


    if(!empty(trim($name_portofolio)) && !empty(trim($info_portofolio)) )  {

                if(!empty($_FILES['picture_portofolio']['tmp_name']) ){

                        if($tipe_file === "image/jpeg" || $tipe_file === "image/png" || $tipe_file === "image/jpg" ){

                                    if($ukuran_file <= 4000000){

                                        if(create_data($name_portofolio, $info_portofolio, $picture_portofolio)) {
                                              echo "success upload portofolio";
                                            }else{
                                              echo "fail upload portofolio";
                                            }

                                            }else{
                                                echo "max file  1.5 mb";
                                            }


                            }else{
                                echo "only.jpeg, .jpg";
                            }

                }else{
                    echo "try again ";
                }

      }else{
        echo 'try again';
      }
    }
    ?>

    </head>

    <body>


    <form action="" method="post" enctype="multipart/form-data">

    <table>
      <tr>
        <td>name portofolio</td>
        <td>:</td>
        <td><input type="text" name="name_portofolio"></td>
      </tr>

      <tr>
        <td>Info portofolio</td>
        <td>:</td>
        <td><textarea name="info_portofolio"></textarea></td>
      </tr>

      <tr>
        <td>picture portofolio</td>
        <td>:</td>
        <td><input type="file" accept="image/*"  name="picture_portofolio"></td>
      </tr>

      <tr>
        <td></td>
        <td></td>
        <td><button type="submit" name="submit">Save</button></td>
      </tr>
      </table>
    </form>

    </body>
    </html>

function-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;
}
}

db.php

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

?>

谢谢 .

解决方法:

尝试使用常规事件.首先,使用以下命令启用事件计划程序

SET GLOBAL event_scheduler = ON;

之后,您可以选择crate event,它将检查行的创建时间.例如

CREATE EVENT recycling ON SCHEDULE EVERY 1 HOUR ENABLE 
  DO 
  DELETE FROM MyTable WHERE `timestamp_column` < CURRENT_TIMESTAMP - INTERVAL 24 HOUR;

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

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

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

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 ;
上一篇:PHP-我需要一些帮助来发现错误


下一篇:Maven 部署说明