Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 转义PostgreSQL字符串值_Node.js_Postgresql_Pg_Pg Promise - Fatal编程技术网

Node.js 转义PostgreSQL字符串值

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,

我正在尝试向我的postgres数据库中插入超过70k的值。但是,每行都有不同类型的特殊字符。当我插入时,我得到了通常的错误。例如: “.5”处或附近出现语法错误。。我正在使用pg promise模块。下面是我正在使用的代码:

  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);
    });
}