问题描述
selectcount(ht_admin_id)fromht_adminwhere','+ht_admin_group+','like'%,1,%'andht_admin_name='haitian'
這條SQL是怎麼回事,拼接的時候為什麼需要加字符逗號????
解决方案
解决方案二:
代表字符串啊example'1'+'aaa'='1aaaa'
解决方案三:
那加逗號的原因是什麼?
解决方案四:
引用1楼hdt的回复:
代表字符串啊example'1'+'aaa'='1aaaa'
那加逗號的原因是什麼?
解决方案五:
逗号是字符串的一部分
解决方案六:
就是找到含“,1,”的字符串
解决方案七:
逗号应该是字符串中的字符,不是通配符,是查询含有,1,所有数据,你放在数据库查询一下就清楚了,通配符说明_与任意单字符匹配%与包含一个或多个字符的字符串匹配[]与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。[^]与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。
解决方案八:
引用4楼hdt的回复:
逗号是字符串的一部分
where后面的,还有+,这是什么意思?
解决方案九:
引用6楼wind_cloud2011的回复:
逗号应该是字符串中的字符,不是通配符,是查询含有,1,所有数据,你放在数据库查询一下就清楚了,通配符说明_与任意单字符匹配%与包含一个或多个字符的字符串匹配[]与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。[^]与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。
where后面的,还有+,这是什么意思?
解决方案十:
用一种语言至少要把它的基本规则掌握,否则你解决一个问题,又会碰上另外一个。跟别说用它来表达意思
解决方案十一:
你看一下你的数据库,ht_admin_group是ht_admin表中的字段否?你把这句放在数据库查询一下就容易清楚
解决方案十二:
引用2楼zhaogao333的回复:
那加逗號的原因是什麼?
他怕错误匹配“26121”。这种字段设计本身很成问题。
解决方案十三:
ht_admin_group中可能包括“,1,”,也可能就是一个数字“1”。
解决方案十四:
他的字符串应该是类似这样的1,2,3,4,5,6,7假设不包含逗号使用like'%1%'则类似‘5,10,2,3’这样的字符串也会被匹配出来,此字符串值中不包含数字1,和需求就不一致了
解决方案十五:
之前有看过某软件就是这样配置权限的。将全部界面编码,例如1~20。如果这个人有界面3、5、14的权限,权限表中的权限字段就存放:3,5,14这样在判断某个界面(如界面6)有没有权限时,就判断“,6,”是否在“,3,5,14,”之中。
解决方案:
逗号就代表一个字符而已····
解决方案:
ht_admin_group字段的内容类似是这样的1,10,101,11010,1,110,10110,110,101,1直接用whereht_admin_grouplike'%,1,%'查询只能查出10,1,110,101会漏掉1,10,101,11010,110,101,1用where','+ht_admin_group+','like'%,1,%'查就不会漏了
解决方案:
引用楼主zhaogao333的回复:
selectcount(ht_admin_id)fromht_adminwhere','+ht_admin_group+','like'%,1,%'andht_admin_name='haitian'這條SQL是怎麼回事,拼接的時候為什麼需要加字符逗號????
--','+ht_admin_group+','=',1,12,13,14,'--like'%,1,%'假如不加逗号,会是什么情况,加了逗号又是什么情况,你试试就知道了。
解决方案:
引用13楼bw555的回复:
他的字符串应该是类似这样的1,2,3,4,5,6,7假设不包含逗号使用like'%1%'则类似‘5,10,2,3’这样的字符串也会被匹配出来,此字符串值中不包含数字1,和需求就不一致了
13楼正解
解决方案:
引用16楼CityBird的回复:
ht_admin_group字段的内容类似是这样的1,10,101,11010,1,110,10110,110,101,1直接用whereht_admin_grouplike'%,1,%'查询只能查出10,1,110,101会漏掉1,10,101,11010,110,101,1用where','+ht_admin_group+','like'%,1,%'查就不会漏了
感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?
解决方案:
引用19楼zhaogao333的回复:
感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?
whereht_admin_grouplike'%,1,%'查询的是ht_admin_group字段内容包含",1,"的记录,而1,10,101,110只有"1,"而10,110,101,1只有",1",显然用whereht_admin_grouplike'%,1,%'查会漏掉这样的记录','+ht_admin_group+','作用是给ht_admin_group字段所有记录前后各添加一个",",相当于先把1,10,101,110变成,1,10,101,110,10,110,101,1变成,10,110,101,1,10,1,110,101变成,10,1,110,101,然后再like'%,1,%自然就不会漏了哇
解决方案:
引用20楼CityBird的回复:
Quote: 引用19楼zhaogao333的回复:
感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?whereht_admin_grouplike'%,1,%'查询的是ht_admin_group字段内容包含",1,"的记录,而1,10,101,110只有"1,"而10,110,101,1只有",1",显然用whereht_admin_grouplike'%,1,%'查会漏掉这样的记录','+ht_admin_group+','作用是给ht_admin_group字段所有记录前后各添加一个",",相当于先把1,10,101,110变成,1,10,101,110,10,110,101,1变成,10,110,101,1,10,1,110,101变成,10,1,110,101,然后再like'%,1,%自然就不会漏了哇
引用20楼CityBird的回复:
Quote: 引用19楼zhaogao333的回复:
感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?whereht_admin_grouplike'%,1,%'查询的是ht_admin_group字段内容包含",1,"的记录,而1,10,101,110只有"1,"而10,110,101,1只有",1",显然用whereht_admin_grouplike'%,1,%'查会漏掉这样的记录','+ht_admin_group+','作用是给ht_admin_group字段所有记录前后各添加一个",",相当于先把1,10,101,110变成,1,10,101,110,10,110,101,1变成,10,110,101,1,10,1,110,101变成,10,1,110,101,然后再like'%,1,%自然就不会漏了哇
明白了,謝謝你了