在 MysQl nodeJS 查询中转义数据数组的最佳方法

Best way to escape array of data on MysQl nodeJS query

所以我有以下对象,它是由用户为了注册而提交的数据构成的:

  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() 但我想找到一种更自动化的方法,而不是手动转义每个值。

Alternatively, you can use ? characters as placeholders for values you would like to have escaped like this: [...]

有办法。 https://github.com/mysqljs/mysql#user-content-escaping-query-values

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

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

警告:您无法将变量绑定到列名,因此很遗憾,查询的这一部分是必需的。确保您 dataToInsert 的密钥是静态的,或者不是来自任何用户输入。