提问人:gom 提问时间:1/20/2020 最后编辑:Dharmangom 更新时间:1/20/2020 访问量:137
我可以在预处理语句中混合使用非边界参数吗?
Can i mix non bounded parameters in prepared statements?
问:
就像我在这里所做的那样:$_SESSION['userid']
function changeEmail($newEmail){
$stmt = $mysqli->prepare("update `users` set `email`=? where `userid`={$_SESSION['userid']} limit 1");
$stmt->bind_param('s',$newEmail);
return $stmt->execute();
}
因为:的值是从数据库生成的(通过auto_increment整数),因此没有SQL注入的风险。另外,我假设连接值比绑定快一点。$_SESSION['userid']
答:
5赞
Dharman
1/20/2020
#1
是的,但你真的不应该!
3分:
- 您需要绑定所有参数,无论它们来自何处,否则您的代码仍然容易受到 SQL 注入的攻击。
- 绑定参数可以使代码更简洁。您无需担心正确的引用、插值或数据类型。
- 串联/插值没有任何好处。代码不会以任何方式更快、更清晰或更好。你已经绑定了一个参数,为什么不绑定其余的呢?
只要你把变量输入直接放在SQL中,你的代码就容易受到SQL注入的影响。始终使用数据绑定!
下一个:如何防止PHP中的SQL注入?
评论
O'Grady