execute(array($id))-6ren">
gpt4 book ai didi

php - 我是否需要对从数据库获取的数据使用准备好的语句?

转载 作者:行者123 更新时间:2023-11-29 20:55:06 24 4
gpt4 key购买 nike

我有一个这样的查询:

$result = $db
-> prepare("SELECT value FROM mytable WHERE id = ?")
-> execute(array($id))
-> fetch(PDO::FETCH_ASSOC);

我想使用 $result['value'] 作为另一个查询的参数(UPDATE 语句)。我应该为 UPDATE 语句使用准备好的语句吗?或者因为我已经从数据库中获取了它,所以不需要将它作为准备好的语句传递?

最佳答案

是的。使用带有绑定(bind)占位符的准备好的语句。

仅仅因为从数据库返回值并不意味着该值可以安全地包含在 SQL 文本中。

您可能有领域知识,mytable 中的 value 列是 INTEGER 类型,因此它是安全的。但在更一般的情况下,对于不知道 mytable 的定义以及 value 可能包含什么的读者。代码的读者会认为 value 不“安全”。据我们所知,我们可能会得到这样的结果:

Robert'); DROP TABLE students; --

每当我们看到一个变量连接到 SQL 文本中时,我们都会假设该变量可能包含除值之外的其他内容,并且它可能包含实际的 SQL。 (或者,如果我们确实看到一个变量连接到 SQL 语句的文本中,我们会期望它会在连接点正确转义。)

因此,首选模式是使用带有绑定(bind)占位符的准备好的语句。这使得读者清楚地知道 value 确实是一个值,并且它不打算被解释为 SQL 文本。

关于php - 我是否需要对从数据库获取的数据使用准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37705972/

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