4

我正在使用 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();

由于帖子值来自用户,因此我遵循此方法,但是例如..我想像所有用户一样从数据库中获取一些东西

SELECT * from users where active=1
  1. 我应该在这里使用准备好的语句还是简单的 $db->query(//code); 会没事的?
  2. 我不应该在同一页面中混合简单的 mysqli 查询和准备好的语句吗?
4

3 回答 3

2

是否将两者混合使用确实是一个偏好问题。在这种情况下,我会说这并没有太大的区别。

准备好的语句与普通查询之间存在性能差异。您的第一个查询作为查询会更慢(假设您通过 运行输入mysqli_real_escape_string,这必须与数据库服务器对话)。但是,由于第二个不接受任何输入,因此将其设置为准备好的语句会将执行分为准备和执行,并产生一些开销。当它是一个查询时,您只执行一次,不接受脚本外部的输入,query速度更快,稍微有点(我怀疑您的速度需求是否真的会有所作为)。

我确实想知道为什么您要获得所有活跃用户,而不是过滤掉以获得您想要的用户,但是没有足够的信息可以说这不是您应该做的。如果您最终只是遍历这些结果并抓住您感兴趣的少数几个,最好将此标准放在WHERE子句中。

于 2013-11-07T18:55:49.070 回答
2
  • 我应该在这里使用准备好的语句还是简单的 $db->query(//code); 会没事的?

如果查询是静态的(没有动态变量),就像你写的那样,你可以使用简单的mysqli::query

  • 我不应该在同一页面中混合简单的 mysqli 查询和准备好的语句吗?

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

于 2013-11-07T18:52:06.070 回答
2

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

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

getActiveUsers()

而不是每次都编写查询。

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

于 2013-11-07T19:04:22.370 回答