Sql中$和#號的區別,以及預編譯的好處

 1 #是將傳入的值當做字符串的形式,eg:select id,name,age from student where id =#{id},當前端把id值1,傳入到後臺的時候,就相當於 select id,name,age from student where id ='1'.


 2 $是將傳入的數據直接顯示生成sql語句,eg:select id,name,age from student where id =${id},當前端把id值1,傳入到後臺的時候,就相當於 select id,name,age from student where id = 1.

 #{}: 解析爲一個 JDBC 預編譯語句(prepared statement)的參數標記符,一個 #{ } 被解析爲一個參數佔位符 。預編譯的話sql語句的格式已經定義好了,缺的就是要傳入進去的參數,所以可以防止sql注入

 ${}: 僅僅爲一個純碎的 string 替換,在動態 SQL 解析階段將會進行變量替換。就比如說下面這條sql;

    eg:SELECT * FROM users WHERE name = `" + userName + "` and pw = `"+ passWord +"`;在userName和passWord地方需要傳入用戶名和密碼進行替換,如果傳入的用戶名和密碼是:userName = "1' OR '1'='1"; passWord = "1' OR '1'='1";這樣的,那麼這條sql就變成了:SELECT * FROM users WHERE name = '1' OR '1'='1' and pw = '1' OR '1'='1';如果用戶名是正確還是錯誤,始終會爲true;因此就可以跳過用戶名和密碼的驗證.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章