我正在使用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])
}
我要建造就像一个需要表格,列和值的模板。 为了防止SQL注入攻击,我已经在使用?值的占位符。不幸的是,MariaDB不支持诸如??之类的标识符的占位符。 仅将表名或列与查询字符串连接起来并不安全,
"SELECT INTO " + tablename +"(" + columns + ")" ...
我的想法是在每次服务器启动时进行查询,数据库中存在哪些表名和列名,并将它们存储在列表中。然后,我可以检查所传递的表和列字符串是否有效。
这个想法有意义吗?如何解决这个问题? 我很感谢每一个建议!
问候
答案 0 :(得分:0)
好吧,我要做的是创建一个包含参数,用户,列,值的存储过程,并且在其中确定要使用的更新语句,如下所示:
create procedure updateValues (in uid int, in columnid int, in value int)...
begin
if columnid = 0 then
update users set name = value;
else if columnid = 1 then
update users set age = value;
end if
end