MyBatis 中#{}和${}區(qū)別

2020-09-10 18:01 更新

#{} 是預(yù)編譯處理,像傳進來的數(shù)據(jù)會加個" "(#將傳入的數(shù)據(jù)都當成一個字符串,會對自動傳入的數(shù)據(jù)加一個雙引號)


${} 就是字符串替換。直接替換掉占位符。$方式一般用于傳入數(shù)據(jù)庫對象,例如傳入表名.

使用 ${} 的話會導(dǎo)致 sql 注入。什么是 SQL 注入呢?比如 select * from user where id = ${value}


value 應(yīng)該是一個數(shù)值吧。然后如果對方傳過來的是 001  and name = tom。這樣不就相當于多加了一個條件嘛?把SQL語句直接寫進來了。如果是攻擊性的語句呢?001;drop table user,直接把表給刪了


所以為了防止 SQL 注入,能用 #{} 的不要去用 ${}


如果非要用 ${} 的話,那要注意防止 SQL 注入問題,可以手動判定傳入的變量,進行過濾,一般 SQL 注入會輸入很長的一條 SQL 語句


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號