2016-07-05 12 views
0

Hallo ich versuche, eine INSERT zu meiner Datenbank mit pg in node.js zu tun, aber ich habe eine Fehler: Spalte "Alter" ist nicht vorhanden.Fehler: Spalte "Alter" existiert nicht [Knoten + Pg + Postgres]

dies ist mein Code:

app.post('/saving', function(req, res){ 
    var age = req.param('Age'); 
    var gender = req.param('gender'); 
    //res.send(age + gender) 
    pool.connect(function(err, client, done){ 
    if(err) { 
     return res.send('error') 
    } 
    client.query('INSERT INTO public.attack (age, gender) VALUES (age , gender)') 

    done() 
    }) 
}) 

hier meine db:

test=# \d attack; 
           Table "public.attack" 
Column |  Type  |      Modifiers      
--------+-------------------+----------------------------------------------------- 
age | integer   | 
gender | character varying | 
id  | integer   | not null default nextval('attack_id_seq'::regclass) 
Indexes: 
    "attack_pkey" PRIMARY KEY, btree (id) 
+0

'IN public.attack INSERT (Alter, Geschlecht) VALUES (Alter, Geschlecht)' ist * genau * was Ihre Datenbank wird sehen, da es nichts darüber weiß, welche Variablen Sie in Ihrem JavaScript haben. – BalinKingOfMoria

+0

ok Problem gelöst, aber jetzt, wenn ich den Browser noch ausstehende (unendlich) posten. – user243062

+0

Wenn Sie eine neue Frage mit den Details Ihres Codes öffnen und was passiert, würde die SO (StackOverflow) Community Ihnen gerne weiterhelfen! – BalinKingOfMoria

Antwort

2

age und gender innerhalb VALUES (age, gender) nicht definiert werden, soweit Postgres betroffen ist. Sie werden in diesem Fall möglicherweise eine prepared statement (oder eine parametrisierte Abfrage) verwenden, um Variablen zusammen mit der Abfrage zu übergeben.

Diese auf den Code wahrscheinlich ähnlich ist, werden Sie wollen, glaube ich:

let sql = 'INSERT INTO public.attack (age, gender) VALUES ($1, $2)'; 
let params = [ age, gender ]; 
client.query(sql, params, function(err) { 
    // make sure you handle errors from here as well, 
    // including signaling `res` and `done` 
}); 
+1

Konkret, meinen Sie, dass "Alter" und "Geschlecht" nicht in die Anfrage interpoliert werden? – BalinKingOfMoria

+0

Abhängig davon, was du interpoliert meinst - Ja, du musst sicherstellen, dass du die Werte direkt zur Verfügung stellst, da postgres keine Ahnung hat, was im JavaScript-Code steht. Ich würde dringend empfehlen, parametrisierte Abfragen zu verwenden. Ich habe aktualisiert, um ein Beispiel sowie den Link zur Postgres-Treiber-Dokumentation aufzunehmen. – dvlsg

+0

Persönlich bin ich nicht mit Node.js und DBs vertraut, aber ja, das ist im Grunde, was ich meine. – BalinKingOfMoria

Verwandte Themen