MySQL綁定變量的簡單介紹


綁定變量

這個就是Java里面的PreparedStatement了。

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");
pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
pstmt.setInt(2, i);
int rowCount = pstmt.executeUpdate();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

這樣一個更新的sql語句分成了兩部,第一步是把帶?的sql語句發送到服務器做預編譯。第二步就是設置參數並且執行了。

這樣做會有如下的好處:

  • 解析一次sql
  • 執行計划會有部分緩存
  • 二進制的方式只發送參數和句柄減少通信量 
    還有一種預發可以SQL接口綁定變量,這個不常用不說了

限制

  • 會話級別的
  • 如果只執行一次的SQL,使用綁定變量會多一次通訊的開銷
  • 不要忘記釋放使用綁定變量的資源,因為mysql對這個有一個上線

SQL注入

使用綁定變量還能夠額外獲得一個好處,即能夠防止SQL注入攻擊。 
比如登陸的時候我們的代碼是這樣的:

String sql = "SELECT COUNT(*) FROM user WHERE username='"+ username+"' AND password ='"+ password +"';"
// 如果password 傳入 ' OR '1'='1這個時候sql就變成了:
// SELECT COUNT(*) FROM user WHERE username='wzj' AND password = '' OR '1'='1'
這個時候就是查詢所有,就相當於永遠為true了。
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

使用綁定變量就可以有效的避免這個問題。



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: