$date = date('Y-m-d H:i:s',strtotime('now'));
$sql = "UPDATE starinformation SET starOwner = nextOwner WHERE DATEDIFF(minute, SiegeStart, :date) = 60";
$que = $db->prepare($sql);
$que->bindParam('date', $date);
try{
$que->execute();
} catch(PDOException $e) {
$e->getMessage();
}
我希望它更新两个日期之间差异至少为1小时的表格。
答案 0 :(得分:0)
尝试更改此内容:
$que->bindParam('date', $date);
到此:
$que->bindValue(':date', $date);
答案 1 :(得分:0)
根据您的问题标题,您需要将查询更改为
$sql = "UPDATE starinformation SET starOwner = nextOwner WHERE DATEDIFF(hour, SiegeStart, :date) = 1";
其次,请确保SiegeStart晚于:date,否则结果将为负,因为DATEDIFF参数是Interval,StartDate和EndDate。
答案 2 :(得分:0)
首先,您说“我希望它更新两个日期差异至少1小时的表格”(强调添加)。
为此,您需要将分钟数与>= 60
进行比较。我强烈建议不要使用DATEDIFF(hour, ..) >= 1
。原因是DATEDIFF()
使用了边界。
e.g。
SELECT DATEDIFF(hour, '2014-02-14 08:59:59', '2014-02-14 09:00:00')
SELECT DATEDIFF(minute, '2014-02-14 08:59:59', '2014-02-14 09:00:00')
SELECT DATEDIFF(second, '2014-02-14 08:59:59', '2014-02-14 09:00:00')
当你跨越1小时的边界,1分钟的边界,1秒的边界时,结果是1对于所有3。这对许多人来说都是一个惊喜。
如果您的代码仍未执行所需操作,请运行SQL事件探查器以捕获正在运行的SQL,并手动运行该SQL以查看结果。这通常会显示生成的SQL语句难以调试的任何问题。
答案 3 :(得分:0)
尝试更改您的查询,如下所示:
$sql = "UPDATE starinformation SET starOwner = nextOwner WHERE DATEDIFF(minute, SiegeStart, :date) >= 60";