我应该一直绑定变量吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该一直绑定变量吗?相关的知识,希望对你有一定的参考价值。

当用户Login到网站

    users
[id  -  name]
[1   -  mark]
[2   -  jean]
[3   -  mary]

我使用以下查询从上表中拉出idname

$Query = "SELECT id FROM users WHERE ~";

然后我检查拉出的数据:

if (ctype_digit($row['id'])) {
    $_SESSION['id'] = $row['id'];
        //Pretened that i didn't use AUTO_INCREMENT in the Table.
} else {
  logout();
}

现在,例如,我想使用$id = $_SESSION['id']从数据库中提取名称

我应该绑$id

$Query = "SELECT name FROM users WHERE id = :id";
    //...execute(['id' => $id])

或者直接添加$id

$Query = "SELECT name FROM users WHERE id = $id";
    //...execute();

我应该只绑定来自Input$_POST/GET['value'];s值

甚至$_SESSION['INT/STR'];php preg_replace() ctype_digit/alnum()功能检查和清理?

答案

性能差异可以忽略不计。在some tests,甚至看起来prepare()execute()稍快。

在SQL中可能存在一些边缘情况,其中参数的使用可能使优化器对查询有错误的想法,并且它可能不会使用它应该的索引。但这些情况很少见。如果您遇到过它们,请与它们打交道。

可能存在以下情况:100%保证变量是安全的,并且代码可读性和维护更容易避免使用参数。

但表现不应该是原因。支持安全性而非性能。

如果你被黑了,你会希望你做到。


P.S。:我建议如果微优化性能对您来说非常重要,那么您应该使用Java或Go等语言,而不是像PHP这样的脚本语言。

以上是关于我应该一直绑定变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

架构丰富的代码片段也应该用于产品列表吗?

试图替换片段,但它一直显示相同的片段

Android 我应该在异步任务中将片段作为弱引用传递吗?

我应该用片段替换 Android 活动吗?

如何创建片段以重复变量编号中的代码行

带有顶点/片段着色器的光。使用不同的变量。 (openGL)