在mysql nodejs查询中转义数据数组的最佳方法

7y4bm7vi  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(332)

所以我有以下对象是由用户为了注册而提交的数据制作的:

var dataToInsert = { 
  userName: 'Wilson J',
  userEmail: 'WilsonJ@gmail.com',
  userAddress: '2020 St.',
  userCellPhone: '95587412',
  }

我使用以下查询插入它:

var insertQuery = `INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES( '${Object.values(dataToInsert).join("','")}' )`;

其结尾为:

INSERT INTO
  users (
    userName,
    userEmail,
    userAddress,
    userCellPhone
  )
VALUES
  (
    'Wilson J',
    'WilsonJ@gmail.com',
    '2020 St',
    95587412
  )

到目前为止,我很难理解数据转义是如何工作的。如果有人能告诉我如何用这段代码进行sql注入以及如何防止它,我将不胜感激。
我使用的是mysql npm模块,它有以下方法: mysql.escape() 但我希望找到一种更自动化的方法,而不是手动转义每个值。

6xfqseft

6xfqseft1#

在当今这个时代,除了将变量绑定到查询之外,不鼓励做任何事情。有关转义数据的其他方法的更多信息,请参见此:

connection.query(`
    INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`, 
    Object.values(dataToInsert),
    function (error, results, fields) {
      if (error) throw error;
      // ...
    }
);

注意:您将无法将变量绑定到列名,因此不幸的是,这部分查询是必需的。确保你的钥匙 dataToInsert 要么是静态的,要么不是来自任何用户输入。

qkf9rpyu

qkf9rpyu2#

或者,您可以使用?字符作为占位符的值,您希望这样转义:[…]
有办法。https://github.com/mysqljs/mysql#user-内容转义查询值

相关问题