我应该一直绑定变量吗?

时间:2017-12-23 17:51:11

标签: php mysql pdo

当用户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'];个值

甚至$_SESSION['INT/STR'];preg_replace() ctype_digit/alnum()个函数进行检查和清理?

1 个答案:

答案 0 :(得分:4)

性能差异可以忽略不计。 some tests https://developers.google.com/web/tools/lighthouse/audits/custom-splash-screen甚至出现了prepare()& execute()稍微更快

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

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

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

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

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