准备好的声明& mysqli_query在同一页面上

时间:2013-11-07 18:44:55

标签: 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();

由于帖子的值来自用户我遵循这个方法但是例如..我想从所有用户那里获取数据库中的东西

SELECT * from users where active=1
  1. 我是否应该在这里使用预备语句或简单的$ db-> query(// code);会没事的?
  2. 我不应该混合简单的mysqli查询&准备好的声明都在同一页面上?

3 个答案:

答案 0 :(得分:2)

  • 我是否应该在这里使用预备语句或简单的$ db-> query(// code);会没事的?

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

  • 我不应该混合简单的mysqli查询&准备好的声明都在同一页面上?

我假设您在单个.php文件中的“在同一页面中”;那样做完全没有问题。记住,PHP解析器会将所有php脚本(当你包含/ require ...时)附加在一起,然后解析它们。

答案 1 :(得分:2)

你是否混合两者真的是一个偏好的问题。在这种情况下,我会说它并没有真正发挥那么大的作用。

预准备语句与普通查询之间存在性能差异。作为查询,您的第一个查询会更慢(假设您通过mysqli_real_escape_string运行输入,这必须与数据库服务器通信)。但是,由于第二个没有输入,因此将其作为预处理语句会将执行分解为准备和执行,并产生一些开销。当它是一个查询时,你只执行一次不从你的脚本外部输入,query更快,更轻微(我怀疑你的速度需求是如此,它确实有所不同)。

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

答案 2 :(得分:2)

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

实际上,为此使用ORM会更好,因为它允许您在需要时重用已准备好的查询。即使你没有使用它们,ORM也会鼓励你写下这样的方法:

getActiveUsers()

而不是每次都写出查询。

了解更多信息,了解SOLID原则和DRY规则。