预编译为什么能够防备sql注入【MySQL教程】,预编译,sql注入
人人都晓得,java中JDBC中,有个预处置惩罚功用,这个功用一大上风就是能进步实行速率尤其是屡次操纵数据库的状况,再一个上风就是防备SQL注入,严厉的说,应该是防备绝大多数的SQL注入。
用法就是如下边所示:
String sql="update cz_zj_directpayment dp"+ "set dp.projectid = ? where dp.payid= ?"; try { PreparedStatement pset_f = conn.prepareStatement(sql); pset_f.setString(1,inds[j]); pset_f.setString(2,id); pset_f.executeUpdate(sql_update); }catch(Exception e){ //e.printStackTrace(); logger.error(e.message()); }
那为何它如许处置惩罚就可以防备SQL注入进步安全性呢?实在是因为SQL语句在顺序运行前已举行了预编译,在顺序运行时第一次操纵数据库之前,SQL语句已被数据库剖析,编译和优化,对应的实行计划也会缓存下来并许可数据库以参数化的情势举行查询,当运行时动态地把参数传给PreprareStatement时,纵然参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处置惩罚而不会作为一个SQL指令,云云,就起到了SQL注入的作用了!
以上就是预编译为何能够防备sql注入的细致内容,更多请关注ki4网别的相干文章!