随笔-15  评论-24  文章-0  trackbacks-0
  2008年10月8日

这个问题也是无意中得知的,原因在于我在模糊查询的时候输入了一个%,谁知将全部结果都查询出来了,想了一下,%既然是通配符,输了个%进去,当然全部查询出来了,避免的办法就是使用ESCAPE。

SQL语句可以写成:

SELECT * FROM tableName WHERE colName LIKE '%' + input + '%' ESCAPE '\\';

这里假设我们的输入是input,在源程序里,input需要进行处理,

input = input.Replace("'""''");      //将1个单引号替换为2个单引号,防止SQL注入
input = input.Replace("\\""\\\\"); //将反斜杠替换为2个反斜杠
input = input.Replace("%""\\%");//将%替换为\%
input = input.Replace("_""\\_");  //将_替换为\_

上面3个替换就是将原字符前面加上反斜杠,这样输入到SQL语句中,ESCAPE '\\'的作用就是将反斜杠后面的字符识别成普通字符,而不是通配符,这下在进行模糊查询,输入通配符就不会有错误了。

注意,一定要先替换反斜杠,然后再替换%和_

posted @ 2008-10-08 11:35 清晨阳光 阅读(218) 评论(1) 编辑