当用户Login
访问网站
users
[id - name]
[1 - mark]
[2 - jean]
[3 - mary]
我使用以下查询从上一个表中提取id
和name
:
$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()
个函数进行检查和清理?
答案 0 :(得分:4)
性能差异可以忽略不计。 some tests https://developers.google.com/web/tools/lighthouse/audits/custom-splash-screen甚至出现了prepare()
& execute()
稍微更快。
在SQL中可能存在一些边缘情况,其中参数的使用可能使优化器对查询有错误的想法,并且它可能不会使用它应该的索引。但这些情况很少见。如果遇到过这些问题,请与他们打交道。
可能存在以下情况:100%保证变量是安全的,并且您的代码可读性和维护更容易避免使用参数。
但表现不应该是原因。支持安全性而非性能。
如果你被黑了,你会希望你做到。
P.S。:我建议如果微优化性能对您来说非常重要,那么您应该使用Java或Go等语言,而不是像PHP这样的脚本语言。