为了防止sql注入危险,在项目中使用了MySqlParameter参数化的方式进行数据库操作;
假设需要模糊匹配的是字段name,其sql语句如下
select * from Table where 1=1 name like '%?name%'
通过执行语句,数据库却提示语法错误,而错误原因是因为参数化的时候?name最终会被字符串替代;假设?name参数化时,其值为’jin’;上述语句等价如下:
select * from Table where 1=1 name like '%'jin'%'
很明显 ‘%’jin’%’ 是非法的;
通过同事解答,最终的正确语法如下:
select * from Table where 1=1 name like concat('%',?name,'%')
总结:
使用like语句进行参数化模糊查找时,需要使用concat函数;