我可以在准备好的语句中混合无界参数吗?

问题描述 投票:-2回答:1

[就像我在这里使用$_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();
}

因为:$_SESSION['userid']的值是从数据库生成的(通过auto_increment整数),因此没有SQL注入的风险。另外,我假设连接值比绑定快一点。

php mysql mysqli prepared-statement
1个回答
0
投票

是,但是您实际上不应该!

3分:

  1. 无论它们来自何处,都必须绑定所有参数,否则您的代码仍然容易受到SQL注入的攻击。
  2. 绑定参数使代码更简洁。您无需担心引用,内插或数据类型。
  3. 串联/插值没有好处。该代码将不会以任何方式变得更快,更清晰或更好。您已经绑定了一个参数,那么为什么不绑定其余参数呢?

只要将变量输入直接放在SQL中,您的代码就容易受到SQL注入的攻击。始终使用数据绑定!

© www.soinside.com 2019 - 2024. All rights reserved.