我尝试将X个月添加到当前日期时间:
UPDATE mytable SET thedate=NOW() + INTERVAL '12 month' WHERE id=1
但是我得到了:
SQLSTATE[22007]: Invalid datetime format: 7 ERROR: invalid input syntax for timestamp: « NOW() + INTERVAL '12 month' »
正确的语法应该是什么?
编辑:似乎它来自我的PHP准备/执行语法
$t = $connect->prepare('UPDATE mytable
SET thedate=:duree
WHERE id=:id');
$ok = $t->execute([
':duree' => "NOW() + INTERVAL '$duree month'",
':id' => $user,
]);
这里的问题是,您试图将变量与SQL表达式绑定,这是不可能的。您只能绑定文字值。如果你替换掉你所展示的绑定,假设$duree = 12
,你会得到这样的SQL:
UPDATE mytable
SET thedate = 'NOW() + INTERVAL ''12 month'''
WHERE id=:id
这显然是不正确的,因为'NOW() + INTERVAL ''12 month'''
不是一个有效的时间戳[tz],因此你现在得到的错误。
由于只有月数是您的参数,您可以简单地将其乘以interval '1 month'
作为整数:
$t = $connect->prepare('UPDATE mytable
SET thedate = now() + (:duree * interval '1 month')
WHERE id=:id');
$ok = $t->execute([
':duree' => $duree,
':id' => $user,
]);