我已经安装了一个自动运行的 cron 作业。它检查数据库中的作业,一小时后应从私有(private)状态更改为公共(public)状态,24 小时后应从公共(public)状态更改为已过期。 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 打开和关闭标签(这里没有包含) 您的帮助将不胜感激。谢谢
最佳答案
我认为您可以在没有那么多 PHP 的情况下更轻松地使用 MySQL 函数。有很多函数,例如 TIMEDIFF
,因此您可以检查从 NOW()
到保存日期的差异是否大于 90 分钟。这是一个很好的问题,如何从您的差异中获取 session 记录。
Difference in minutes from two time fields in MySQL
那么您就不需要选择并更新所有行。您可以直接更新所有符合条件的行。
关于php - 1 小时后和 24 小时后更改状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022139/