nodejs和mariadb避免查询每一列

brtdzjyr  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(352)

我用的是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 + ")" ...

我的想法是在每个服务器启动时查询数据库中存在哪些表和列名,并将它们存储在一个列表中。然后我可以检查传递的表和列字符串是否有效。
这个想法有意义吗?还是一种常见的方法?你将如何处理这个问题?我感谢你的每一个建议!
问候语

cbeh67ev

cbeh67ev1#

好吧,我要做的是创建一个带有params、user、column、value的存储过程,它将决定使用哪个update语句,如下所示:

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

相关问题