防御SQL注入方法(1)-使用预编译语句

$query = "INSERT INTO myCity (Name, CountryCode, Distrit) VALUES (?,?,?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("sss", $val1, $val2, $val3);
$val1 = 'Stuttgart';
$val2 = 'DEU';
$val3 = 'Baden-Wuerttemberg';
$stnt->execute();

这是PHP使用预编译语句的一个例子,在这个例子中,先预编译SQL语句,将变量用?表示。当用户输入参数时,通过bindParam()函数绑定,将输入当做整体传给预编译SQL语句来执行,不会出现执行拼接字符的情况,避免了SQL注入攻击。

prepareStatement= connection.prepareStatement("INSERT INTO tb1_students (name,age,sex,address) VALUES (?,?,?,?)"); 
prepareStatement.setString(1,var1); 
prepareStatement.setString(2,var2); 
prepareStatement.setString(3,var3); 
prepareStatement.setString(4,var4); 
prepareStatement.executeUpdate(); 

这是Java中的预编译语句,原理跟PHP中的一样。
使用预编译语句的优点不仅仅是防御SQL注入攻击,其优点还有:
(1)提高执行效率
预编译对象就是把一些格式固定的SQL编译后,存放在缓冲区中,当我们再次执行相同的SQL语句时就不需要预编译的过程了。
(2)提高代码可读性和可维护性
使用?代替参数,将输入参数与SQL语句分开,方便扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值