问题描述
场景是做个对数据库A表字段CONTENT的模糊查询。语句类似: PreparedStatement stmt = conn.prepareStatement("select * from A where CONTENT like ? "); String searchString = "aa";//匹配内容 stmt.setString(1,"%" + searchString + "%");这个语句匹配包含searchString 为"aa"内容的数据,但如果传入的不是 "aa",而含特殊的符号如 "%",就可查询出来所有的数据。一个解决的办法是将语句改为:"select * from A where CONTENT like ? ESCAPE ''"然后再对searchString进行一下预处理(在"%:","_","" 字符前附加""). 感觉这个方法还是比较拖沓,而且本质上还是需要程序去转义sql,而不是依赖数据库本身来处理. 不知各位有什么比较好的处理方法?
解决方案
数据库一般不提供转义功能,只有在由开发语言处理!GOOGLE搜索都把那些特殊字符过滤了!
解决方案二:
一般是在前台做check,把%等符号作为禁止输入的字符
时间: 2025-01-27 22:12:03