MySQL绑定变量的简单介绍

本文介绍 Java 中 PreparedStatement 的使用方法及其带来的优势,包括减少网络通信量、提高执行效率,并能有效防止 SQL 注入攻击。

绑定变量

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值