我在理解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
修饰,就不能将变量名放入另一个变量中。同样,您不能将列名放在占位符中。
您应指定不带占位符的列名:
var queryConfig = {
text: 'INSERT INTO users(username, firstname, lastname) VALUES($1, $2, $3);',
values: ['ab', 'A', 'B']
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句