例如,给定一个文本框名称,用户需求希望能够进行通配符搜索(例如包含、开始于、结束于)。
只要我仍在后端(Java)中使用参数化查询,是否可以接受 sql 通配符('%' 和 '_')作为输入?有效地,允许用户构建自己的正则表达式,这就是用户的需求。
例子:
用户类型在
textbox = '%are%'
该参数被馈送到后端,如下所示:
public class PersonDaoImpl { public List<Person> search(String name){//name gets the value from textbox w/ sql wildcards Query q = mgr.createNativeQuery('select * from Person where name like :name'); //default to always use like since expecting searchkey with sql wildcards q.setParameter('name', name);//gives the input from the screen return q.getResultList(); } }
- 由于用户提供了正则表达式,结果集将包括名称为“Waren”、“Jared”、“Clare”、“Blare”的人。
使用 SQL 参数化查询,我可以确保我不会允许 SQL 注入。这实现了用户对通配符搜索的要求,但它是否违反了我可能遗漏的任何内容?
更新:刚刚从他们的帮助页面发现谷歌也允许通配符。