2014-05-21 89 views
1

我無法理解npm軟件包pg及其「動態語句」。

我希望能夠生成INSERT INTO語句,但我只得到回報的語法錯誤

var pg = require('pg'); 
var connectionString = 'postgres://[email protected]/db'; 

pg.connect(connectionString, function(err, client, done) { 
    if (err) { return console.error(err); } 

    var queryConfig = { 
    text: 'INSERT INTO users($1, $2, $3) VALUES($4, $5, $6);', 
    values: ['username', 'firstname', 'lastname', 'ab', 'A', 'B'] 
    }; 

    client.query(queryConfig, function (err, result) { 
    if (err) { return console.error(err); } 
    done(); 
    }); 
}); 

我得到的錯誤是:

{ [error: syntax error at or near "$1"] 
    name: 'error', 
    length: 84, 
    severity: 'ERROR', 
    code: '42601', 
    detail: undefined, 
    hint: undefined, 
    position: '19', 
    internalPosition: undefined, 
    internalQuery: undefined, 
    where: undefined, 
    file: 'scan.l', 
    line: '1053', 
    routine: 'scanner_yyerror' } 

任何人可以幫助我理解我做錯了嗎?

回答

4

數據庫通常不會讓您使用標識符(表名,列名......)的佔位符。 PostgreSQL的抱怨,因爲你試圖使用前三個佔位符列名:

INSERT INTO users($1, $2, $3) ... 

你可以這樣想在JavaScript中的變量名標識符:你不能把一個變量名到另一個變量沒有某種eval經濟蕭條。同樣,您不能在佔位符中放置列名。

你應該沒有佔位符的指定列名:

var queryConfig = { 
    text: 'INSERT INTO users(username, firstname, lastname) VALUES($1, $2, $3);', 
    values: ['ab', 'A', 'B'] 
}; 
+0

Cewl,我一直以爲是類似的東西。 Thx mu! – mraxus

相關問題