在搜索功能的准备语句中使用通配符
当使用关键字作为搜索参数实现搜索功能时,有必要使用SQL 中的 LIKE 关键字。然而,将 LIKE 与准备好的语句集成可能有点棘手。
在提供的示例中:
PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes);
SQL 字符串中的占位符 (?) 表示将使用LIKE 关键字。在这种情况下,应将 关键字% 附加到分配给占位符参数的值。
解决方案:
将 LIKE 与 preded 一起使用语句中,通配符 ('%') 应直接在值本身中设置,而不是在 SQL 字符串中设置。这可以通过在设置参数时将通配符附加到值来完成:
pstmt.setString(1, notes + "%");
如果需要前缀匹配,则应将通配符放在值的开头:
pstmt.setString(1, "%" + notes);
对于全局匹配,通配符应该放在值的两端:
pstmt.setString(1, "%" + notes + "%");
需要注意的是值中的特殊字符(例如 %、_、[ 和 !)需要进行转义,以避免与在 LIKE 子句中用作通配符发生冲突。响应中提供的示例通过在设置参数之前用转义序列替换这些字符来充分解决此问题。
以上是如何在 SQL 中安全使用通配符和预编译语句实现高效搜索?的详细内容。更多信息请关注PHP中文网其他相关文章!