#{}是占位符;使用“#{} ”只能在数据库管理系统中,将#{}中的参数带入
select * from user where username=#{sname} --此种情况下,首先经过预编译形成如下SQL,再将参数带入,此时给参数值带加单引号 select * from user where username=?
此种情况下是可以防止SQL注入的
既然#{}能够防止SQL注入,"$ {}"不能,为什么mybaits还要提供这么一个符号?,当然有myBatis的理由,如果SQL语句中数据库对象需要传参进去,那只能使用** ${}**。如查询用户表(user) ,参数变量为tableName=‘user’,代码只能是
select * from ${tableName} //转换为SQL语句为 select * from user
在myBatis中变量做为where子句中的参数,一律使用#{},禁止使用“ ” , 以 防 S Q L 注 入 ; S Q L 语 句 中 包 含 了 数 据 库 对 象 ( 如 表 、 视 图 等 ) 才 能 使 用 “ {} ”,以防SQL注入;SQL语句中包含了数据库对象(如表、视图等)才能使用“ ”,以防SQL注入;SQL语句中包含了数据库对象(如表、视图等)才能使用“{} ”,因为#{},自动给变量加上引号,如上例:
select * from #{tableName} //转换为SQL语句为 select * from 'user'
以上就是SQL注入与防止及myBaits基本作用的详细内容,更多关于SQL注入与防止及myBaits作用的资料请关注其它相关文章!
更多SQL内容来自木庄网络博客