MySQL使用LIKE匹配用户输入时拼接%通配符报错如何解决?
问题原因
- 你的写法有两处核心错误:
- 模糊匹配必须使用
LIKE运算符,你当前使用的=是精确匹配运算符,无法识别%通配符 - 不能直接将
%写在预编译占位符前,这种写法不符合MySQL语法规范,会直接触发语法报错
正确实现方式
方案1:参数绑定时拼接通配符(推荐,避免SQL注入风险)
SQL语句调整为:
SELECT * FROM clients WHERE UserName LIKE :UserName;
在代码中给:UserName参数赋值时,根据匹配需求给用户输入内容拼接%即可:
- 全模糊匹配(匹配包含用户输入的所有值):参数值为 `%用户输入内容%
- 前缀匹配(匹配以用户输入开头的所有值):参数值为
用户输入内容% - 后缀匹配(匹配以用户输入结尾的所有值):参数值为
%用户输入内容
方案2:SQL中直接拼接通配符
如果不想在代码层处理参数,可直接调用MySQL的CONCAT函数实现拼接,全模糊匹配示例如下:
SELECT * FROM clients WHERE UserName LIKE CONCAT('%', :UserName, '%');
内容的提问来源于stack exchange,提问作者Amy Davidson
相关产品推荐
相关产品推荐

