【发布时间】:2017-05-23 22:06:00
【问题描述】:
我有一个问题:
SELECT * FROM table_name WHERE name=? surname=? gender=?;
我必须将字符串注入查询中(我使用准备好的语句),但问题是这 3 个子句是可变的;根据用户的输入,我可以激活 0、1 或所有 3 个子句。
如果用户不为它们输入任何内容,我如何“忽略”它们?
谢谢大家!
编辑:如果有人知道如何将 setStrin() 设置为preparedStatement 而不让他将' ' 放在字符串周围,那也很好。
【问题讨论】:
-
动态 SQL 取胜。
-
要么准备所有七种可能的组合(如果没有子句也是一个选项,则为 8 种),或者动态构建查询。
-
查看标准。顺便说一下,下面的解决方案正在运行。
-
如果您可以使用
setString()允许它不在值周围加上引号,那么防止注入将毫无用处。任何人都可以拥有像true ; drop table table_name; --这样的值。