2016-07-05 62 views
0

您好我试图做一个INSERT到我的数据库使用pg在node.js但我有一个 错误:列“年龄”不存在。错误:列“年龄”不存在[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() 
    }) 
}) 

这里我分贝:

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

'INSERT INTO public.attack(年龄,性别)VALUES(年龄,性别)'是*正是*你的数据库会看到,因为它不知道你在JavaScript中有什么变量。 – BalinKingOfMoria

+0

好的问题解决了,但现在当我发布浏览器仍然待定(无限)。 – user243062

+0

如果您用代码的细节和发生的事情开启一个新问题,SO(StackOverflow)社区会很乐意帮助您! – BalinKingOfMoria

回答

2

agegenderVALUES (age, gender)不会被定义,只要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

相关问题