我已经安装了一个自动运行的cron作业。它会检查数据库中的作业,一小时后它应该从私有状态更改为公共状态,24小时后应该从公共状态更改为过期状态。 cron作业运行顺利但下面的代码没有带来预期的结果。数据库数据没有变化,当我自己运行时,没有任何内容显示为消息。
如何扭转它以达到目的?
我的代码:
// Check and do something: private to public
$now=date("Y-m-d H:i:s");
$timeBefore=strtotime($now-3600);
$check=mysqli_query($con,"SELECT * FROM ibirakas WHERE status='private' AND added<'$timeBefore'") or die(mysql_error());
while($exe_check=mysqli_fetch_assoc($check)){
$id=$exe_check['kiraka_id'];
$query=mysql_query("UPDATE ibirakas SET status='public' WHERE id='$id'") or die(mysql_error());
if($query==true){
echo "CRON_1_DONE";
} else {
echo "CRON_1_FAIL";
}
}
//check and do something: public to expired
$now=date("Y-m-d H:i:s");
$timeBefore=strtotime($now-86400);
$check=mysqli_query($con,"SELECT * FROM ibirakas WHERE status='public' AND added<'$timeBefore'") or die(mysql_error());
while($exe_check=mysqli_fetch_assoc($check)){
$id=$exe_check['kiraka_id'];
$query=mysql_query("UPDATE ibirakas SET status='expired' WHERE id='$id'") or die(mysql_error());
if($query==true){
echo "CRON_2_DONE";
} else {
echo "CRON_2_FAIL";
}
}
我已经包含了connect.php文件,而且我已经打开了php打开和关闭标签(这里没有包含) 我们将不胜感激。谢谢
答案 0 :(得分:1)
我认为如果没有那么多PHP,你可以更轻松地使用MySQL功能。有许多功能,例如TIMEDIFF
,因此您可以检查从NOW()
到保存日期的差异是否大于90分钟。这是一个很好的问题,如何从差异中获得分钟。
Difference in minutes from two time fields in MySQL
然后您不需要这样选择并更新所有行。您可以直接更新符合条件的所有行。
答案 1 :(得分:0)
我能够找到这个问题的相关答案。由于我想首先使用MySQL,这个简单的解决方案就做到了。
<?php
include("connect.php");
date_default_timezone_set("Africa/Kigali");
// Change from private to public
$query=mysqli_query($con,"SELECT * FROM ibirakas WHERE TIME_TO_SEC(TIMEDIFF(now(),`added`))>3600 AND status='private'");
while($row=mysqli_fetch_assoc($query)){
$change=mysqli_query($con,"UPDATE ibirakas SET status='public'");
}
// Change from public to expired
$query=mysqli_query($con,"SELECT * FROM ibirakas WHERE TIME_TO_SEC(TIMEDIFF(now(),`added`))>86400 AND status='public'");
while($row=mysqli_fetch_assoc($query)){
$change=mysqli_query($con,"UPDATE ibirakas SET status='expired'");
}
?>
由于