2016-08-31 5 views
1

が、私は現在の日時にX月を追加しようとするこれまでのXヶ月を追加します。PostgreSQLは

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' » 

は何正しいsyntaxeすべきですか?

編集:それはここでの問題は、あなたが不可能なSQL式と変数をバインドしようとしているということである構文

$t = $connect->prepare('UPDATE mytable 
     SET thedate=:duree 
     WHERE id=:id'); 

    $ok = $t->execute([ 
     ':duree' => "NOW() + INTERVAL '$duree month'", 
     ':id' => $user, 
    ]); 
+0

あなたは英語のエラーメッセージを共有することができますしてください? – Mureinik

+0

はい、ご迷惑をおかけします。 – Macbernie

+0

また、どのようなpostgresのバージョンをお使いですか? – Mureinik

答えて

3

準備/実行私のPHPから来ているようです。リテラル値のみをバインドできます。 'NOW() + INTERVAL ''12 month'''が有効なタイムスタンプではありませんよう

UPDATE mytable 
    SET thedate = 'NOW() + INTERVAL ''12 month''' 
    WHERE id=:id 

、明らかに正しいされていない[TZ]、したがって:あなたは$duree = 12を想定し、あなたが示したもののうち、バインドを交換したい場合は、このようないくつかのSQLを取得したいですあなたが今得たエラー。

としてヶ月の数だけがあなたにパラメータであり、あなたは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, 
]); 
+0

本当にありがとう@Matheus – Macbernie