2016-08-31 6 views
1

Ich versuche, X Monat zum aktuellen Datetime hinzuzufügen:PostgreSQL hinzufügen X Monate zu einem Datum

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

Aber ich habe:

SQLSTATE[22007]: Invalid datetime format: 7 ERROR: invalid input syntax for timestamp: « NOW() + INTERVAL '12 month' » 

Was sollte die richtige syntaxe sein?

Edit: scheint es von meinem PHP kommt Prepare/execute-Syntax

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

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

Können Sie eine englische Fehlermeldung bitte teilen? – Mureinik

+0

Ja sorry, es ist update – Macbernie

+0

Auch - welche Postgres Version verwendest du? – Mureinik

Antwort

3

Das Problem hierbei ist, dass Sie versuchen, eine Variable mit einem SQL-Ausdruck zu binden, was nicht möglich ist. Sie können nur Literalwerte binden. Wenn Sie die Bindungen aus ersetzen würde, was Sie zeigte, unter der Annahme $duree = 12, würden Sie einige SQL wie diese:

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

die eindeutig nicht korrekt ist, als 'NOW() + INTERVAL ''12 month''' kein gültiger Zeitstempel [tz], daher Der Fehler, den Sie jetzt bekommen.

Da nur die Anzahl der Monate ist ein Parameter für Sie, Sie könnten einfach mehrere es als eine ganze Zahl mit 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

In der Tat, danke @Matheus – Macbernie

Verwandte Themen