#和$ SQL注入

#可以防止SQL注入
$无法防止SQL注入

#{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。
例如,sqlMap 中如下的 sql 语句
select * from user where name = #{name};

解析为:
select * from user where name = ?;

一个 #{ } 被解析为一个参数占位符 ? 。一个 仅仅为一个纯碎的 s t r i n g 替换,在动态 S Q L 解析阶段将会进行变量替换例如, s q l M a p 中如下的 s q l s e l e c t ∗ f r o m u s e r w h e r e n a m e = ′ 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换 例如,sqlMap 中如下的 sql select * from user where name = ' 仅仅为一个纯碎的string替换,在动态SQL解析阶段将会进行变量替换例如,sqlMap中如下的sqlselectfromuserwherename={name}';
当我们传递的参数为 “ruhua” 时,上述 sql 的解析为:
select * from user where name = “ruhua”;
预编译之前的 SQL 语句已经不包含变量 name 了。
综上所得, KaTeX parse error: Expected 'EOF', got '#' at position 29: …在动态 SQL 解析阶段,而 #̲{ }的变量的替换是在 DBM…{ } 在预编译之前已经被变量替换了,这会存在 sql 注入问题。

你可能感兴趣的:(mysql,mysql)