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