Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
Javascript 使用SQL在pg PROMITE中产生语法错误_Javascript_Sql_Postgresql_Express_Pg Promise - Fatal编程技术网

Javascript 使用SQL在pg PROMITE中产生语法错误

Javascript 使用SQL在pg PROMITE中产生语法错误,javascript,sql,postgresql,express,pg-promise,Javascript,Sql,Postgresql,Express,Pg Promise,我的一个端点中有以下代码: let setText = '' for (const [ key, value ] of Object.entries(req.body.info)) { setText = setText.concat(`${key} = ${value}, `) } // Last character always an extra comma and whitespace setText = setText.substr

我的一个端点中有以下代码:

    let setText = ''
    for (const [ key, value ] of Object.entries(req.body.info)) {
        setText = setText.concat(`${key} = ${value}, `)
    }
    // Last character always an extra comma and whitespace
    setText = setText.substring(0, setText.length - 2)

    db.one('UPDATE students SET ${setText} WHERE id = ${id} RETURNING *', { setText, id: req.body.id })
        .then(data => {
            res.json({ data })
        })
        .catch(err => {
            res.status(400).json({'error': err.message})
        })

它应该从请求体动态生成SQL。当我记录创建的SQL时,它会正确生成。当我直接查询数据库时,它甚至可以工作。然而,每当我运行端点时,我都会得到一个语法错误,无论
setText
是什么,它都是“等于或接近”的。我已经尝试使用slice而不是substring,但没有任何更改。

您永远不应该手动连接值,因为它们没有正确转义,并打开代码以接受可能的SQL注入

使用图书馆提供的工具。有关动态对象的
更新
,请参见以下内容:

const cs=new pgp.helpers.ColumnSet(req.body.info,{table:'students});
const query=pgp.helpers.update(req.body.info,cs)+
pgp.as.format('WHERE id=${id}RETURNING*',req.body);
db.1(查询)
。然后(数据=>{
res.json({data});
})
.catch(错误=>{
res.status(400).json({error:err.message})
});

您是否尝试过在
然后
捕获
部分中使用console.log来查看哪一个被触发?您决不能像这样手动连接值,这是对查询的严格禁止。您必须使用库提供的格式引擎。@Graham捕获被触发,因为根据请求,我得到了错误对象的400。这将是问题文本中非常有价值的信息。我对这个库还是很陌生,谢谢您的帮助,稍后我会尝试一下。