[mysql]我需要为我正在从数据库的数据使用预准备的语句吗?

标签: MySQL PHP
发布时间: 2017/4/9 22:34:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个像这样的查询︰

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

我想要使用 $result['value'] 作为另一个查询的参数( UPDATE 语句)。我应该使用预准备的语句的 UPDATE 语句吗?还是因为我已经从数据库,然后无需通过它作为预准备的语句?

解决方法 1:

是的。与绑定的占位符使用预准备的语句。

只是因为正在从返回的值的数据库并不意味着价值是安全的 SQL 文本中列入。

你可能有域知识, value 中的列 mytable 是整数类型,以便它能安全。但在更一般的情况下,和对于读者来说,不知道定义的 mytable ,和什么 value 可能包含。您的代码的读者就会认为, value 并不是"安全"。我们都知道,我们会不会像这样︰

Robert'); DROP TABLE students; --

每当我们看到串连到 SQL 文本变量,我们要假设变量可能包含一些值以外的值,而它可能会包含实际 SQL。(或者,如果我们看到连接成一条 SQL 语句的文本变量,我们将期待,就要进行正确地它连接点正确转义。)

因此,首选的模式将会使用预准备的语句绑定的占位符。这就明确向读者, value 确实是一个值,它并不是要解释为 SQL 文本。

官方微信
官方QQ群
31647020