[英]node.js + postgres: Syntax error at or near “$1”
我无法理解npm包pg及其“动态语句”。
我希望能够生成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中考虑变量名称之类的标识符:如果没有某种eval
chicanry,您不能将变量名称放入另一个变量中。 同样,您不能将列名放在占位符中。
您应该指定没有占位符的列名:
var queryConfig = {
text: 'INSERT INTO users(username, firstname, lastname) VALUES($1, $2, $3);',
values: ['ab', 'A', 'B']
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.