【发布时间】:2017-11-01 16:00:21
【问题描述】:
我已经安装了一个 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 打开和关闭标签(这里不包含) 您的帮助将不胜感激。谢谢
【问题讨论】:
-
警告:如果您只是学习 PHP,请不要使用
mysql_query接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。您的用户数据不是properly escaped,有SQL injection bugs,可以被利用。 -
请尝试改掉用
== TRUE之类的不必要的东西弄乱代码的习惯。许多函数旨在返回评估为 true 的值,因此文字比较是多余的。 -
我还打算立即提到 PDO,尽管鉴于所有变量都是由程序内部生成的,你没有任何打开的注入错误,除非 PHP 行为不端或你的 kiraka_id 已经打开注射。无论如何,您都应该使用 PDO 并转义。但是,您是否进行了通常的调试?它在哪里失败?您是否取回了您期望的数据,但没有更新?
-
感谢您的参考,我需要它@tadman
-
我没有收到任何输出,数据也没有改变。所以我真的不知道问题出在哪里