gpt4 book ai didi

php - 我应该一直绑定(bind)变量吗?

转载 作者:行者123 更新时间:2023-11-29 01:35:33 24 4
gpt4 key购买 nike

当用户登录到网站时

    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']数据库中提取名称>

我应该绑定(bind) $id

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

或者直接添加$id

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

我应该只绑定(bind)来自 $_POST/GET['value'];Input

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

最佳答案

性能差异可以忽略不计。在 some tests甚至 prepare()execute() 都显得稍微更快

SQL 中可能存在一些边缘情况,其中参数的使用会使优化器对查询产生错误的想法,并且它可能不会使用它应该使用的索引。但这些情况很少见。如果遇到它们,请及时处理。

可能存在这样的情况,即 100% 保证变量是安全的,为了代码的可读性和维护性,避免使用参数更容易。

但性能不应该是原因。优先考虑安全性而不是性能。

如果您遭到黑客攻击,您会希望自己做到了。


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

关于php - 我应该一直绑定(bind)变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com