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

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

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

  1. var dataToInsert = {
  2. userName: 'Wilson J',
  3. userEmail: 'WilsonJ@gmail.com',
  4. userAddress: '2020 St.',
  5. userCellPhone: '95587412',
  6. }

我使用以下查询插入它:

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

其结尾为:

  1. INSERT INTO
  2. users (
  3. userName,
  4. userEmail,
  5. userAddress,
  6. userCellPhone
  7. )
  8. VALUES
  9. (
  10. 'Wilson J',
  11. 'WilsonJ@gmail.com',
  12. '2020 St',
  13. 95587412
  14. )

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

6xfqseft

6xfqseft1#

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

  1. connection.query(`
  2. INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`,
  3. Object.values(dataToInsert),
  4. function (error, results, fields) {
  5. if (error) throw error;
  6. // ...
  7. }
  8. );

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

qkf9rpyu

qkf9rpyu2#

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

相关问题