#{ }:預編譯
-
可以避免sql注入。
-
sql注入原理:在輸入的引數中插入惡意程式碼,sql在編譯時會直接將惡意程式碼和語句拼接到一起。
-
避免的原因:預編譯會在編譯時使用?佔位,固定sql語句的結構,然後用傳入引數替換掉?,此時會在傳入的引數值兩端加引號' ',這樣傳入的引數就視為字串。
-
${ }:佔位符,直接將傳入的引數和語句拼接在一起
-
有sql注入問題
-
解決1:將 WHERE `some_field` = '${變數}' 替換為 WHERE `some_field` = #{param}
-
解決2:將like '%${變數}%' 替換為 like concat('%', #{變數}, '%')
-
-
使用
-
order by 只能用這個,ORDER BY ${id}
-
like語句也需要用這個,select * from dm_dataset where name like '${name}%'
-