Node.js 转义PostgreSQL字符串值
我正在尝试向我的postgres数据库中插入超过70k的值。但是,每行都有不同类型的特殊字符。当我插入时,我得到了通常的错误。例如: “.5”处或附近出现语法错误。。我正在使用pg promise模块。下面是我正在使用的代码:Node.js 转义PostgreSQL字符串值,node.js,postgresql,pg,pg-promise,Node.js,Postgresql,Pg,Pg Promise,我正在尝试向我的postgres数据库中插入超过70k的值。但是,每行都有不同类型的特殊字符。当我插入时,我得到了通常的错误。例如: “.5”处或附近出现语法错误。。我正在使用pg promise模块。下面是我正在使用的代码: function pg_insert(x) { var name = x["name"]; var lastName = x["lasname"]; var sql = `insert into table(name,
function pg_insert(x) {
var name = x["name"];
var lastName = x["lasname"];
var sql = `insert into table(name, lastname)`;
var values = `values (${name},${lastname})`;
pg.db
.none(sql + values)
.then(data => {})
.catch(err => {
console.log(err);
});
}
任何帮助都将不胜感激
谢谢你正如卢卡斯提到的,使用:
您还可以使用:
然而,正如报告中所述:
请记住,虽然属性值null和undefined的格式都为null,但当属性不存在时会引发错误
如果传递对象x
中的任何属性不存在(例如x.name
,x.lasname
,{“name”:“Joe”}
(请注意缺少的lasname
属性)),则上述命名参数示例代码将产生错误
正如vitaly-t(库创建者)所提到的,在pg promise
中有一些功能可以帮助处理丢失的数据。但是,如果您不能保证将传递到查询中的数据的形状,并且对添加清理数据所需的代码不感兴趣,那么参数化查询可能是防故障的更容易的选项
读者可以决定哪种方法对他们的用例最有意义。如果您只是正确使用,那么它将起作用:
function pg_insert(x) {
pg.db.none('INSERT INTO table(name, lastname) VALUES(${name}, ${lastname})', x)
.then(data => {})
.catch(err => {
console.log(err);
});
}
更新
我还修订了《公约》,包括以下内容:
警告:切勿在ES6模板字符串中使用${}
语法,因为这些字符串不知道如何格式化PostgreSQL的值。在ES6模板字符串中,您只能使用4种备选方案中的一种—$()
、$
、$[]
或$/
…让它更清楚。是
${name}
字符串插值吗?如果是,我建议使用参数化查询,以避免引用和可能的SQL注入问题。我将如何做到这一点?。Nvm,刚刚找到了怎么做。谢谢参数化查询的建议可能放错了位置。库pg promise
本身提供了几种处理缺失值和默认值的方法,从采用此类选项的基本方法as.format
,到同样适用于此类默认值的帮助程序
命名空间。无论如何,参数化查询
在这里不是一个好的选择。
function pg_insert(x) {
const sql = 'insert into table(name, lasname) values (${name}, ${lastname})';
pg.db
.none(sql, x)
.then(data => {})
.catch(err => {
console.log(err);
});
}
function pg_insert(x) {
pg.db.none('INSERT INTO table(name, lastname) VALUES(${name}, ${lastname})', x)
.then(data => {})
.catch(err => {
console.log(err);
});
}