在特定时间从数据库中删除行


Delete a row from database at a specific time

用户可以在"时间表"表中插入一行,其中包括讲座的开始和结束时间。

INSERT INTO `timetable`(`Lab`, `start`, `end`, `Day`, `Lecture`, `Student`, `T_ID`) 
    VALUES ('$lab','$stime','$etime','$day','$lec','$class','$ID')

我希望该行在讲座结束后自动删除,即当前时间等于讲座结束时间。

一种方法(我在网上的某个地方找到的)是使用 mysql 事件

SET GLOBAL event_scheduler = ON;
CREATE EVENT delete_event
   ON SCHEDULE AT '2016-27-2 08:00:00'
   ON COMPLETION PRESERVE
  DO
    BEGIN
      DELETE FROM `timetable` WHERE (`Lab`= $lab, `start`, `end`, `Day`)
    END;

但问题是,我不能传递 php 变量来代替调度时间。像这样的东西。

SET GLOBAL event_scheduler = ON;
CREATE EVENT delete_event
   ON SCHEDULE AT '<?php echo($etime)?>'
   ON COMPLETION PRESERVE
  DO
    BEGIN
      DELETE FROM `timetable` WHERE (`Lab`= $lab, `start`, `end`, `Day`)
    END;

我发现这个问题的另一个解决方案是创建一个 cron 作业(我根本不熟悉这个)。据我了解,这可以使用托管服务器中的cpanel(或任何其他控制面板)来完成。但是,如果我使用的是本地主机怎么办?有没有其他方法可以在不使用任何控制面板的情况下手动创建 cron 作业(也许使用事件调度程序?

如果有其他方法可以解决这个问题,我全听。我是编码的菜鸟,所以如果这是一个愚蠢的问题,请原谅我,但请回答!

创建一个 cron.bat 文件,其中包含示例行 C:''xampp''php''php.exe -f C:''xampp''htdocs''somwhere.php> C:''xampp''htdocs''somwhere.log并使用 Windows 事件调度程序

您可以尝试重复的事件。例如

CREATE EVENT
ON SCHEDULE
  EVERY 1 DAY
ON COMPLETION PRESERVE
DO
  BEGIN
    DELETE FROM `timetable` WHERE (`day` < NOW())
  END;

查看文档:http://dev.mysql.com/doc/refman/5.7/en/create-event.html

另一种解决方案是在添加时态数据时,在同一脚本中添加事件(就像您已经拥有的事件一样,但没有ON COMPLETION PRESERVE)。就像数据库上的任何其他查询一样,可能会发生这种情况。