2017-11-13 4 views
1

Ich versuche, eine Knoten-Postgres-Abfrage zu schreiben, das eine ganze Zahl nimmt in einem Intervall als Parameter zu verwenden:parametrisierte Abfrage mit Stringliteral in node-Postgres

const query = { 
    text: 
     `SELECT 
     foo 
     FROM bar 
     WHERE 
      DATE(created_at) >= DATE(NOW()) - INTERVAL '$1 DAYS';`, 
    values: [daysAgo] 
    } 

Als ich das laufen, es gibt diese Fehlermeldung es nicht zu sehen, die $1 anzeigt, weil es in einfache Anführungszeichen eingeschlossen ist:

binden Nachricht liefert 1 Parameter, aber vorbereitete Anweisung „“ erfordert 0

Gibt es eine unterstützte Möglichkeit, dies zu tun? Wenn nicht, was ist die beste Arbeit um?

Antwort

1

Ich fand this reference, die zeigt, dass Sie die Konvention von '1 DAY' * X verwenden können.

Ich konnte dies damit arbeiten erhalten:

(async() => { 
     const { rows } = await pgpool.query(` 
      SELECT id, name FROM users 
      WHERE DATE(created) <= DATE(NOW()) - INTERVAL '1 DAY' * $1;`, 
      [req.params.daysAgo]); 
+0

@alexroussos, wenn Sie den vollen Anruf mit catch() sehen müssen, etc. Lassen Sie mich wissen, und ich werde meine Antwort bearbeiten. – rotarydial

+0

Das ist perfekt. Vielen Dank – alexroussos

Verwandte Themen