1. 程式人生 > >mysql中 ${param}與#{param}區別

mysql中 ${param}與#{param}區別

${param}傳遞的引數會被當成sql語句中的一部分,比如傳遞表名,欄位名

例子:(傳入值為id)

order by ${param}

則解析成的sql為:

order by id

#{parm}傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號

例子:(傳入值為id)

select * from table where name = #{param}

則解析成的sql為:

select * from table where name = "id"

為了安全,能用#的地方就用#方式傳參,這樣可以有效的防止sql注入攻擊

sql注入簡介

直接上了百度的例子,感覺一看就清晰明瞭

某個網站的登入驗證的SQL查詢程式碼為:

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"passWord +"');"

惡意填入

userName = "1' OR '1'='1";

passWord "1' OR '1'='1";

時,將導致原本的SQL字串被填為

strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"

也就是實際上執行的SQL命令會變成下面這樣的

strSQL = 
"SELECT * FROM users;"

這樣在後臺帳號驗證的時候巧妙地繞過了檢驗,達到無賬號密碼,亦可登入網站。所以SQL注入攻擊被俗稱為黑客的填空遊戲。