出现问题以及问题分析
- 这条语句会把user_name不为空的所有记录查询出来
select *
from user
where user_name like concat(‘%‘,‘_‘,‘%‘)
-
分析:‘_‘:相当于一个占位符,表示占用一个字符,会匹配包含一个字符的所有记录
-
其他特殊字符:‘%‘:会查询出所有记录
解决办法
-
第一层:使用 ‘/‘ 将特殊字符(比如:‘‘、‘%‘)转义掉,即:使用 ‘/‘ 替换 ‘_‘,使用 ‘/%‘ 替换 ‘%‘
-
第二层:使用 ‘/‘ 将 ‘/‘转义掉,即使用 ‘//‘ 替换掉 ‘/‘
* 使用双斜杠替换单斜杠是因为我们上面为转义特殊字符而引入单斜杠,所以我们需要把本身的单斜杠转换为双斜杠使用(有一点点绕,也可以结合下面的SQL理解)
SQL示例(帮助理解)
-
escape ‘/‘ :MySQL中一种语法,表示/之后的符号不被当做通配符使用
-
转义特殊字符
select *
from user
where user_name like concat(‘%‘,‘/%‘,‘%‘) escape ‘/‘ -- 就是指我要查询user_name中包含 % 的记录
- 转义自己
select *
from user
where user_name like concat(‘%‘,‘///%‘,‘%‘) escape ‘/‘ -- 查询包含 ‘/%‘的所有记录