2016-05-18 6 views
-1

Ich möchte in Tabelle Werte aus Array einfügen.Einfügen in Tabellenwerte aus Array

var theFields = 
    "my_id,"+ 
    "fruit,"+... 

var theData = [ 
    my_id, 
    req.body.fruit,... 
    ] 

ich tun kann:

client.query("INSERT INTO theTable("+ theFields +") values($1,$2,$3,$4,$5,$6,$7,$8,$9,...." + 

aber ich möchte die "$ 1, 2..so auf $"

So vermeiden, habe ich versucht:

client.query("INSERT INTO theTable("+ theFields +") values($1::varchar[])",[theData], function(err, result) { 

client.query("INSERT INTO theTable("+ theFields +") values ANY($1::varchar[])",[theData], function(err, result) { 

aber sie funktionieren nicht.

Beachten Sie, dass die Felder vom selben Typ sind, varchar.

(Auch wenn ich verschiedene Arten haben, gibt es eine Möglichkeit, dies wie die mit irgendeiner Lösung zu erreichen, den ich versuche?)

+0

Das ist eine schlechte Idee, weil Variablen richtige für Strings zu entkommen bieten, auch gegen SQL-Injection zu schützen. –

Antwort

0

Sie String $1,$2,... programmatisch zusammenstellen können. Ich gehe davon aus, dass Länge von theData Array auf die Anzahl der Felder in der Abfrage gleich ist:

var values = theData.map(function(f, i) { 
    return "$" + (i + 1); 
}).join(); 
client.query("INSERT INTO theTable(" + theFields + ") values(" + values + ")", ... 
+0

: Es gibt 'TypeError: theFields.map ist keine Funktion' ' – George

+0

@George rechts, siehe Update. – madox2

+0

: In der Abfrage, nach den 'Werten (" + Werte + ")", "sollte ich" Werte ("+ Werte +") ", dieDaten, Funktion (err, result) {' oder '[theData] , Funktion (err, result) {'oder etwas anderes, weil es hängt. – George