sql語句中#{}和${}的區別
#將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by “111”, 如果傳入的值是id,則解析成的sql為order by “id”。
$將傳入的資料直接顯示生成在sql中。如:order by userid,如果傳入的值是111,那麼解析成sql時的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id。
#方式能夠很大程度防止sql注入;$方式無法防止Sql注入。
$方式一般用於傳入資料庫物件,例如傳入表名。
一般能用#的就別用 。 M y B a t i s 排 序 時 使 用 o r d e r b y 動 態 參 數 時 需 要 注 意 , 用 。MyBatis排序時使用order by 動態引數時需要注意,用 。MyBatis排序時使用orderby動態參數時需要注意,用而不是#。
預設情況下,使用#{}格式的語法會導致MyBatis建立預處理語句屬性並以它為背景設定安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName};
這裡MyBatis不會修改或轉義字串。
重要:接受從使用者輸出的內容並提供給語句中不變的字串,這樣做是不安全的。這會導致潛在的SQL隱碼攻擊,因此你不應該允許使用者輸入這些欄位,或者通常自行轉義並檢查。
相關文章
- SQL語句中exists和in的區別SQL
- SQL語句中not in 和not exist的區別SQL
- sql語句中as的用法和作用SQL
- SQL中 where 子句和having子句中的區別SQL
- SQL語句中 left join 後用 on 還是 where,區別大SQL
- sql語句中as的用法SQL
- sql語句中JOIN ON 的使用SQL
- SQL插入語句中有單引號 && SQL中char nchar varchar nvarchar的區別 && Java中字元(串)和數值型別的轉換SQLJava字元型別
- SQL語句中的AND和OR執行順序問題SQL
- sql語句中select……as的用法SQL
- sql語句中as的意思是什麼SQL
- 在sql語句中替換Not In 的方法SQL
- sql語句中常量的處理SQL
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- SQL Server SQL語句中的函式呼叫與Oracle SQL語句函式呼叫一個有趣的差別SQLServer函式Oracle
- SQL Server 和 MySql 語法和關鍵字的區別ServerMySql
- SQL 語句中關於 NULL 的那些坑SQLNull
- SQL語句中NULL的真實含義SQLNull
- 總結SQL語句中的優化提示SQL優化
- MyBatis在SQL語句中取list的大小MyBatisSQL
- 在ORACLE SQL語句中,單引號和雙引號的使用OracleSQL
- MYSQL和SQL的區別MySql
- SQL語句中SELECT語句的執行順序SQL
- MyBatis的使用三(在sql語句中傳值)MyBatisSQL
- 關於在SQL語句中ON和WHERE中條件使用的差異SQL
- SQL中where和on的區別SQL
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- 如何自動填充SQL語句中的公共欄位SQL
- Oracle SQL 語句中正規表示式的應用OracleSQL
- sql語句中較為重要的查詢邏輯SQL
- SQL語句中的單引號與雙引號SQL
- Python 提取出SQL語句中Where的值的方法PythonSQL
- v$sql和v$sqlarea的區別SQL
- SQL中IN和EXISTS用法的區別SQL
- SQL語句中聚合函式忽略NULL值的總結SQL函式Null
- oracle 對於SQL語句中物件名的解析順序OracleSQL物件
- sql語句中where一定要放在group by 之前SQL
- SQL語句中不同的連線JOIN及SQL中join的各種用法SQL