爲何preparestatement可以防止sql注入

一、preparestatement在程序第一次查詢數據庫以前sql語句就被數據庫進行了分析、編譯、優化以及具體的查詢計劃也都造成了。(參數位置使用佔位符)sql

 二、當程序真正發起查詢請求時,這時傳遞過來的參數會被認爲是某個字段的值,而不會從新編譯、優化,因此它不會被認爲是一個sql指令。數據庫

三、若是傳遞進來的參數沒法被看做是sql指令那麼就沒法造成sql注入了。如 or '1=1' 這樣的參數不會被當作or指令,而是某個字段的字符串類型的值。優化

四、正是由於sql的執行計劃是在sql編譯、優化以後造成的,因此說sql注入只在編譯階段起做用。該解決方式就是不讓參數參與編譯階段,而是使用佔位符代替,從而解決了sql注入問題。rest

相關文章
相關標籤/搜索