2
$createDate = mktime(0,0,0,10,28,date("Y"));
$selectedDate =  date('d-m-Y', ($createDate));
$active = 0;
$sql = "UPDATE Session SET Active = ? WHERE SessionDate <= ?";                                         
$update = $mysqli->prepare($sql);
$update->bind_param("is", $active, $selectedDate);  
$update->execute();

我认为我没有正确设置上述代码,因为我正在运行一项 CRON 作业,我曾声明每年 10 月 28 日(今天),它将“活动”字段设置为 0。

问题是它将我数据库中所有行的活动字段设置为“0”,即使它是在今年 10 月 28 日之后。

以下是假设发生的事情:

  • 现在是 2012 年,所以当它变成 10 月 28 日(现在是现在)时,任何“SessionDate”在此日期之前的考试都应该有一个“活动”值“0”,其他考试仍然有一个“活动” “1”的值。

  • CRON 将在明年 10 月 28 日之前完成它的工作,这次显然是 2013 年。同样的规则适用于任何“SessionDate”在此日期之前的考试,“Active”值为“ 0”,其他考试仍然具有“1”的“活动”值。

  • 然后,CRON 将在下一年的 10 月 28 日之前完成它的工作,这次显然是 2014 年。同样的规则适用于任何“SessionDate”在此日期之前的考试,“Active”值为“0”,其他考试仍然具有“1”的“活动”值。

等等....

那么,当 CRON 执行此操作时,为什么我的所有数据库行的“活动”字段都设置为 0?

4

1 回答 1

1

这不起作用的原因是日期结构与数据库中的日期结构不匹配。

在我的 php 脚本中,我得到了它:

$selectedDate =  date('d-m-Y', ($createDate));

它应该是这样的:

$selectedDate =  date('Y-m-d', ($createDate));
于 2012-10-28T01:49:22.003 回答