参数占位符 #{xx} 和 ${xx} 的区别

  • #{xx} :带有#{}的SQL会采用SQL预编译技术,预编译后的SQL中 #{} 被替换为 “?”,这里的 “?”叫变量占位符,在实际执行SQL时会用“xx”的实际值替换变量占位符,效率更高,可以防止SQL注入
    • SQL预编译:MySQL执行SQL有几个步骤,“查缓存->[语法分析->优化->编译->]执行”,如果缓存中存在该SQL则直接执行,否则编译后将结果会存在缓存中,以提升后续查询的效率
  • ${xx}:不采用SQL预编译技术,每次执行SQL时,直接将“xx”拼接在SQL中(xx不作为一个变量),然后将SQL发给MySQL服务器走SQL执行的流程,效率更低,存在SQL注入风险
    • SQL注入:通过操作输入的数据来修改事先定义好的SQL语句,从而执行代码对服务器进行攻击

posted @ 2024-12-15 19:58  Locho  阅读(75)  评论(0)    收藏  举报