Php 备妥的声明及;同一页面上的mysqli_查询

Php 备妥的声明及;同一页面上的mysqli_查询,php,mysqli,Php,Mysqli,我正在使用mysqli准备的语句 $email=$_POST['email']; $password=$_POST['password']; $sql="SELECT * from users where email=? and password=?"; $result=$db->prepare($sql); $result->bind_param('ss',$email,$password); $result->execute(); 由于post值来自用户,因此我遵循此

我正在使用mysqli准备的语句

$email=$_POST['email'];
$password=$_POST['password'];


$sql="SELECT * from users where email=? and password=?";
$result=$db->prepare($sql);
$result->bind_param('ss',$email,$password);
$result->execute();
由于post值来自用户,因此我遵循此方法,但对于例如。。我想像所有用户一样从数据库中获取一些东西

SELECT * from users where active=1
  • 我应该在这里使用准备好的语句还是简单的$db->query(//code);好吗
  • 我是否应该在同一页面中混合使用简单的mysqli查询语句和准备语句
    • 我应该在这里使用准备好的语句还是简单的$db->query(//code);好吗
    如果查询是静态的(没有动态变量),就像您编写的查询一样, 使用simple
    mysqli::query

    • 我是否应该在同一页面中混合使用简单的mysqli查询语句和准备语句

    我假设您所说的“在同一页”是指在一个.php文件中;那么这样做绝对没有问题。请记住,PHP解析器会将所有PHP脚本(当您确实包含/需要…)附加在一起,然后对它们进行解析。

    是否将两者混合使用实际上是一个偏好问题。在这种情况下,我想说这并没有带来多大的区别

    准备好的语句与普通查询之间存在性能差异。第一个查询的速度会比查询慢(假设您通过
    mysqli\u real\u escape\u string
    运行输入,这必须与数据库服务器进行对话)。但是,由于第二个语句不接受任何输入,因此将其设置为prepared语句会将执行分为prepare和execution,并会产生一些开销。如果查询只执行一次,不需要脚本外部的输入,
    query
    会稍微快一点(我怀疑您的速度需求是否真的会产生影响)


    我真的很奇怪为什么你要得到所有的活跃用户,而不是过滤掉你想要的,但是没有足够的信息表明你不应该这么做。如果您最终只是循环浏览这些结果并获取您感兴趣的少数结果,那么最好将此标准放在
    WHERE
    子句中。

    尽可能使用准备好的语句是一种良好的做法。如果您的应用程序将增长,您将不得不用用户输入替换硬编码的变量,该怎么办

    实际上,使用ORM更好,因为它可以让您在需要时重用准备好的查询。即使您不准备它们,ORM也会鼓励您编写如下方法:

    getActiveUsers()
    
    而不是每次都写查询


    阅读有关原则和规则的更多信息。

    如果我使用ORM,我是否必须处理sql注入,或者ORM将为我处理?大多数ORM都会为您处理。当然,您可以绕过其中的安全构建,但您必须努力做到这一点:)