我们写程序的人都知道,sql注入很难防,保险的做法都是接受参数,而不是拼接字符串。
但在有的情况下,参数实现会变的更复杂。比如 select count(col1) from table1 where col1 in ( 'a','b')
这个in中的条件就是参数,可是sql中处理数组很麻烦啊,怎么办呢?
想到在做like优化的时候,使用过charindex,不知道这里能用不,于是拉不来试了试
exec sp_executesql
N'SELECT COUNT(ID) FROM [Order ]
WHERE Status = @condition AND CHARINDEX('','' + NOMUBER + '','', @cstno + '','')>0',
N'@condition varchar(50),@cstno varchar(370)',
@condition='1',
@cstno=',,CDA016,CDA019,CDA020,CDA018,CDA028,CDA030,CDA037,CDA041,CDA042,CDA046,CDA050,CDA057,CJF,CJL,CDA001,CGW,
CDA012,CDA044,CNA012,CDA002,CDA003,CDA004,CDA005,CDA000,CDA006,CDA010,CDA008,CDA011,CDA015,CDA014,CDA017,CDA021,
CDA022,CDA023,CDA024,CDA025,CDA031,CDA033,CDA035,CDA032,CDA036,CDA038,CDA039,CDA040,CDA043,CDA045,CDA047,CDA048,
CDA054,CDA056,CDA034,CNA043,CDA013,CDA029,'
结果正确。
请大家注意标红的语句,我在 NOMUBER 前后都加了一个",",如若不然会出现一些莫名其妙的错误。 如:我想查的nomuber=cda,不在前后加个逗号,那么@cstno都匹配了,所以大家用的时候一定要注意自己的这边字符串数组分隔符是什么。