我用的是nodejs和mariadb。我有很多表,其中一些用户可以通过请求更改值。我不想为用户想要更新的每一列准备查询,例如:
module.exports.updateName = (name,id) =>{
return pool.query("UPDATE Users SET name=? WHERE user_id=?;", [name,id])
}
module.exports.updateAge = (name,id) =>{
return pool.query("UPDATE Users SET age=? WHERE user_id=?;", [age,id])
}
我想建立s.th。就像一个需要表、列和值的模板。为了防止sql注入攻击,我已经在使用?值的占位符。不幸的是,mariadb不支持像???这样的标识符的占位符??。我觉得仅仅将表名或列连接到查询字符串是不安全的,比如:
"SELECT INTO " + tablename +"(" + columns + ")" ...
我的想法是在每个服务器启动时查询数据库中存在哪些表和列名,并将它们存储在一个列表中。然后我可以检查传递的表和列字符串是否有效。
这个想法有意义吗?还是一种常见的方法?你将如何处理这个问题?我感谢你的每一个建议!
问候语
1条答案
按热度按时间cbeh67ev1#
好吧,我要做的是创建一个带有params、user、column、value的存储过程,它将决定使用哪个update语句,如下所示: