#和&

#{ }:预编译

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

 

参考资料:

https://bbs.huaweicloud.com/blogs/394244

posted @ 2024-08-27 20:00  zhegeMaw  阅读(23)  评论(0)    收藏  举报