You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:含%符号的Prepared statement实现搜索功能

解决带%符号的Prepared Statement模糊搜索问题

嘿,我来帮你搞定这个带%的Prepared Statement模糊搜索问题!其实核心就是要正确处理通配符%的位置,同时保留Prepared Statement防SQL注入的优势,下面给你两种常用的靠谱方案:

方案1:在参数值中直接包含%符号

这是最直观的方式,把%和你要搜索的关键词拼接好之后,作为参数传给Prepared Statement就行,不用改SQL结构。举个Java JDBC的例子:

// 注意SQL里只留占位符?,不要加%
String sql = "SELECT * FROM users WHERE username LIKE ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
// 把%和关键词拼在一起,作为参数传入
pstmt.setString(1, "%john%");
ResultSet rs = pstmt.executeQuery();

其他语言比如Python的psycopg2(PostgreSQL)也是同理:

sql = "SELECT * FROM users WHERE username LIKE %s"
cur.execute(sql, ('%john%',))

这种方式的好处是逻辑简单,你能完全控制%的位置(比如只加前缀%john或后缀john%)。

方案2:在SQL语句中用数据库函数拼接%

如果你不想在参数里处理%,可以用数据库自带的字符串拼接函数,把%和占位符拼在一起。不同数据库的函数略有不同:

MySQL/MariaDB

SELECT * FROM users WHERE username LIKE CONCAT('%', ?, '%')

PostgreSQL

SELECT * FROM users WHERE username LIKE '%' || ? || '%'

SQL Server

SELECT * FROM users WHERE username LIKE '%' + ? + '%'

使用这种方式时,你只需要传入纯关键词(比如john)作为参数就行,数据库会自动帮你拼接通配符。

重要提醒!

绝对不要手动把%和关键词直接拼到SQL字符串里(比如写"SELECT ... LIKE '%"+keyword+"%'"),这种写法会完全丧失Prepared Statement防SQL注入的安全优势,非常危险!

如果是其他语言或数据库的场景,你可以补充更多细节,我再帮你调整方案~

内容的提问来源于stack exchange,提问作者pippo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:07:28