javascript - 在 MysQl nodeJS 查询中转义数据数组的最佳方法
问题描述
所以我有以下对象是由用户提交的数据制作的,以便注册:
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()
但我想找到一种更自动化的方法,而不是手动转义每个值。
解决方案
在这个时代,除了将变量绑定到您的查询之外,不鼓励做任何事情。有关转义数据的其他方法的更多信息,请参阅此内容:
connection.query(`
INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`,
Object.values(dataToInsert),
function (error, results, fields) {
if (error) throw error;
// ...
}
);
注意事项:您将无法将变量绑定到列名,因此很遗憾,查询的这一部分是必需的。确保您的密钥dataToInsert
是静态的,或者不是来自任何用户输入。
推荐阅读
- amazon-web-services - AWS SageMaker(禁用互联网)无法连接到 STS
- linux - 为什么 aarch64-linux-gnu/bin/ld 找不到明显存在的 lpaho-mqtt3a?
- node.js - 编译的 webpack node-loader 不兼容 libpixman 库版本
- cocoapods - 运行 pod install 时出现“您的项目未明确指定 CocoaPods 主规范 repo”警告
- node.js - 将 nodejs 脚本调度为 SQL Server 代理作业
- javascript - 该程序在浏览器的控制台中运行良好,但代码没有重定向到所需的 html 页面
- php - POST JSON 从 PHP 到 API
- xml - 使用 XSLT 删除重复问题
- php - 使用 foreach 循环时更新模型关系的数据
- go - 与具有命名参数和未命名参数的函数的接口