2016-07-05 20 views
0

こんにちは、node.jsでpgを使用してデータベースにINSERTしようとしていますが、存在しない。エラー:カラム "age"が存在しません[node + pg + postgres]

これは私のコードです:ここ

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() 
    }) 
}) 

私のdb:VALUES (age, gender)内部

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

は '正確に*何データベース*'である(年齢、性別)VALUES(年齢、性別)public.attack。INSERT INTOあなたがあなたのJavaScriptにどのような変数を持っているかについては何も知らないので、これが表示されます。 – BalinKingOfMoria

+0

ok問題は解決されましたが、現在はブラウザがまだ保留中(無限)に投稿されています。 – user243062

+0

あなたのコードの詳細と何が起こっているかで新しい質問を開くと、SO(StackOverflow)コミュニティがあなたを助けてくれるでしょう! – BalinKingOfMoria

答えて

2

agegenderは限りPostgresが懸念しているとして、定義されることはありません。この場合、prepared statement(またはより具体的にはパラメータ化されたクエリ)を使用して、クエリと共に変数を渡したいと思うでしょう。

これはおそらくあなたが望むだろうコードに似て、私は信じている:

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

具体的には、「年齢」と「性別」がリクエストに挿入されないことを意味しますか? – BalinKingOfMoria

+0

補間の意味に依存します - はい、postgresはjavascriptコードの内容を知らないので、値を直接指定する必要があります。パラメータ化されたクエリを使用することを強くお勧めします。 Postgresのドライバのドキュメントへのリンクと同様に例を含めるように更新しました。 – dvlsg

+0

個人的に、私はNode.jsとDBに精通していませんが、基本的にはそれは意味しています。 – BalinKingOfMoria

関連する問題