String sql = "select * from table where id = ";
String id = "123";
sql += id; // 拼接方式
execute(sql);sql
拼接方式若是 id 被(恶意)改为 id = "123 or 1=1" 则最终查询结果会彻底不同。.net
String sql = "select * from table where id = :id";
而占位符的方式将语句与用户数据分开的。即便错写成 id = "123 or 1=1" 也会把
这个总体看成用户数据,而不会把 or 1=1 当成是查询语句。blog
"select * from table where id = \'123 or 1=1\'"
能够这样理解用占位符后的实际执行语句(但实际上并非简单地增长了单引号
具体参考:http://blog.csdn.net/inconsolabl/article/details/48091903)table