在准备语句中使用“like”通配符
准备语句通过防止 SQL 注入攻击和增强性能,提供了执行 SQL 查询的有效方法。但是,将“like”通配符与准备好的语句集成可能有点棘手。
考虑以下查询,该查询根据关键字在“analysis”表中搜索行:
PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes); ResultSet rs = pstmt.executeQuery();
要在此查询中使用“like”通配符,您需要将其包含在绑定到准备好的语句参数的值中。仅仅在 pstmt.setString(1, Notes) 中添加“keyword%”是不够的。
相反,您可以根据需要实现前缀、后缀或全局匹配:
notes = notes .replace("!", "!!") .replace("%", "!%") .replace("_", "!_") .replace("[", "!["); PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'"); pstmt.setString(1, notes + "%");
pstmt.setString(1, "%" + notes);
pstmt.setString(1, "%" + notes + "%");
请记住使用正斜杠 () 对“notes”字符串中的特殊字符进行转义,以防止它们干扰“like”通配符搜索。
以上是如何在准备好的语句中有效使用“like”通配符?的详细内容。更多信息请关注PHP中文网其他相关文章!