#和&

zhegeMaw發表於2024-08-27

#{ }:預編譯

  • 可以避免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}%'

相關文章