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