MySQL绑定变量的简单介绍

来源:互联网 发布:老王python视频教程 编辑:程序博客网 时间:2024/06/07 03:57

绑定变量

这个就是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

使用绑定变量就可以有效的避免这个问题。


0 0
原创粉丝点击