回覆列表
-
1 # 使用者928021938244
-
2 # 人販子姐姐
#將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。 $將傳入的資料直接顯示生成在sql中 #方式能夠很大程度防止sql注入,$方式無法防止Sql注入,一般能用#的就別用$.
#將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。 $將傳入的資料直接顯示生成在sql中 #方式能夠很大程度防止sql注入,$方式無法防止Sql注入,一般能用#的就別用$.
#{ } 解析為一個 JDBC 預編譯語句(prepared statement)的引數標記符。
例如,sqlMap 中如下的 sql 語句
select * from user where name = #{name};
解析為:
select * from user where name = ?;
一個 #{ } 被解析為一個引數佔位符 ? 。
${ } 僅僅為一個純碎的 string 替換,在動態 SQL 解析階段將會進行變數替換
例如,sqlMap 中如下的 sql
select * from user where name = "${name}";
當我們傳遞的引數為 "ruhua" 時,上述 sql 的解析為:
select * from user where name = "ruhua";
預編譯之前的 SQL 語句已經不包含變數 name 了。
綜上所得, ${ } 的變數的替換階段是在動態 SQL 解析階段,而 #{ }的變數的替換是在 DBMS 中。
注意:${ } 在預編譯之前已經被變數替換了,這會存在 sql 注入問題。