Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在特定时间从数据库中删除行_Php_Mysql_Ajax_Cron - Fatal编程技术网

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

Php 在特定时间从数据库中删除行,php,mysql,ajax,cron,Php,Mysql,Ajax,Cron,用户可以在“时间表”表中插入一行,其中包括讲座的开始和结束时间 INSERT INTO `timetable`(`Lab`, `start`, `end`, `Day`, `Lecture`, `Student`, `T_ID`) VALUES ('$lab','$stime','$etime','$day','$lec','$class','$ID') 我希望该行在讲座结束后自动删除,即当前时间等于讲座结束时间 INSERT INTO `timetable`(`Lab`, `sta

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

INSERT INTO `timetable`(`Lab`, `start`, `end`, `Day`, `Lecture`, `Student`, `T_ID`) 
    VALUES ('$lab','$stime','$etime','$day','$lec','$class','$ID')
我希望该行在讲座结束后自动删除,即当前时间等于讲座结束时间

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;
SET GLOBAL event_scheduler=ON;
创建事件删除事件
按计划在“”处
竣工保护区
做
开始
从'timeline'中删除('Lab`=$Lab,'start`,'end`,'Day`)
结束;
我发现这个问题的另一个解决方案是创建一个cron作业(我对此一点都不熟悉)。据我所知,这可以使用托管服务器中的cpanel(或任何其他控制面板)来完成。 但是如果我使用的是本地主机呢? 是否有其他方法可以在不使用任何控制面板(可能使用事件调度器)的情况下手动创建cron作业


如果有别的办法解决这个问题,我洗耳恭听。我是一个编码高手,所以如果这是一个愚蠢的问题,请原谅我,但一定要回答

使用示例行C:\xampp\php\php.exe-f C:\xampp\htdocs\somwhere.php>C:\xampp\htdocs\somwhere.log创建一个cron.bat文件,并使用windows事件调度器您可以尝试重复事件。比如说

CREATE EVENT
ON SCHEDULE
  EVERY 1 DAY
ON COMPLETION PRESERVE
DO
  BEGIN
    DELETE FROM `timetable` WHERE (`day` < NOW())
  END;
创建事件
按时
每1天
竣工保护区
做
开始
从'timeline'中删除('day`

查看文档:

另一个解决方案是在添加临时数据时,在同一脚本中添加事件(就像您已经有过的事件,但没有完成时保留的
)。这可能会发生,就像数据库上的任何其他查询一样。

如果Visrozar在Linux上怎么办?如果Visrozar不使用文件夹C:\xampp中的xampp怎么办?我在示例行中提到过,他没有说他使用的是什么本地主机或什么操作系统。更可能的情况是,他在Linux上,因为cron作业只针对Linux。在windows上,它们称为计划任务。如果它在Linux上,大多数发行版都有自己添加cron作业的方法。我使用的是xampp和windows操作系统,但我不太理解你给出的答案(可能是因为我在编码方面太弱),你能给我一个示例代码或链接,让我可以阅读更多关于它的内容吗?Visrozar,创建一个文本文件,例如cron1.txt,放置C:\xampp\php\php.exe-f C:\xampp\htdocs\yourscript.php>C:\xampp\htdocs\yourscript.log,然后将cron1.txt重命名为cron1.bat,使其成为可执行文件,然后在windows任务计划程序上使用。在“开始”菜单上搜索任务计划程序。是否有任何特定原因要删除数据?如果有的话,它们可以作为统计数据。只在
start
列时间之后显示事件是一个可行的选项。是的,我想从表中删除数据,因为该行是时间表中的临时更改(如额外的讲座),讲座结束后,我不想将其保留在数据库中(因为它不是常规时间表的一部分).我希望在讲课时间结束后立即删除该行,如果日程安排每天只检查一次,则无法按时删除,并且可能会有近24小时的延迟。然后您必须将日程安排得更紧;)我在同一个脚本中添加事件,问题仍然是,如何发送特定的时间来运行事件(不仅仅是时间戳)。据我所知,oncompletion子句只阻止服务器在事件过期后自动删除一个子句。我不明白为什么去掉它会有帮助。(我是noob!)您正在php脚本中插入,对吗?因此,除了触发
$db->query(“插入到时间表(`Lab`、`start`、`end`、`Day`、`teachment`、`Student`、`T_ID`)值(`Lab`、`stime`、`etime`、`Day`、`lec`、`class`、`ID`)之外,
您必须执行
$db->query(“创建事件”“删除”..$ID.”按计划在“$day$etime”开始从“时间表”中删除,其中“实验室”=$Lab END;”