node.js + postgres:在“$ 1”或其附近的语法错误

我无法理解npm包pg及其“dynamic语句”。

我想能够生成INSERT INTO语句,但是我只返回语法错误

var pg = require('pg'); var connectionString = 'postgres://postgres@localhost/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' } 

任何人都可以帮助我理解我做错了什么吗?

数据库通常不允许使用标识符(表名,列名等)的占位符。 PostgreSQL正在抱怨,因为你正在尝试使用前三个占位符作为列名称:

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

你可以在JavaScript中想象variables名称这样的标识符:不能把一个variables名称放入另一个variables中,而不需要进行某种eval修饰。 同样,你不能在一个占位符中放置一个列名。

您应该指定没有占位符的列名称:

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