【问题标题】:How to fix single quotes in parameterised mySQL query causing this issue?如何修复导致此问题的参数化 mySQL 查询中的单引号?
【发布时间】:2021-08-04 08:23:24
【问题描述】:

  const {tableName,recordId,idName}= req.query;
  const arrayParam=[tableName,idName,recordId];
  let sqlstmt="UPDATE ? SET status = 'deleted' WHERE ? = ?"
    db.query(sqlstmt,arrayParam,(err,result) => {
    if(err){console.log('Error occured while fetching user information',err)
            res.send(err)
              }
    console.log(result);
    res.send(result);
  });
});

错误:

sqlMessage:“您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,了解在 ''trainingRecords' SET status = 'deleted' WHERE 'recordId' = ' 附近使用的正确语法10000107'' 在第 1 行", sqlState: '42000', 指数:0, sql: "UPDATE 'trainingRecords' SET status = 'deleted' WHERE 'recordId' = '10000107'"

在上面的 sn-p 中,据我了解,是“'”(参数化中添加的单引号)导致了问题。有什么建议可以解决这个问题吗?

【问题讨论】:

  • 您不能准备以表名作为参数的查询。查询编译器无法编译没有表名的查询(也适用于列名)

标签: mysql node.js express prepared-statement sql-injection


【解决方案1】:

不要使用准备好的语句来注入您用来过滤或更新的表名或字段。尝试使用此查询。

UPDATE trainingRecords SET status = 'deleted' WHERE recordId = ?

【讨论】:

  • 我正在尝试重用 db 查询在不同场景中更新不同的表。最好的方法是什么?
  • 一个。使用不同的查询。湾。如果你确定你不会。在这些字段中接收 SQL 注入,您可以使用 JS 的模板字符串插入它们。请将此标记为有帮助的答案。
猜你喜欢
  • 1970-01-01
  • 2018-02-09
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多