1. 程式人生 > >mysql語法之--#與$符號關鍵字的用法(一)

mysql語法之--#與$符號關鍵字的用法(一)

一、#與$ 的sql拼接區別

      1、${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"

二、#與$ 的安全性

       1、#能防止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注入攻擊被俗稱為黑客的填空遊戲。