2016-07-05 59 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

相關問題