【发布时间】:2016-06-08 14:52:08
【问题描述】:
我有一个这样的查询:
$result = $db
-> prepare("SELECT value FROM mytable WHERE id = ?")
-> execute(array($id))
-> fetch(PDO::FETCH_ASSOC);
我想使用$result['value'] 作为另一个查询的参数(UPDATE 语句)。我应该为UPDATE 语句使用准备好的语句吗?还是因为我是从数据库中获取的,所以不需要将其作为准备好的语句传递?
【问题讨论】:
-
是的,你总是应该的。它被称为second level injection。永远不要假设任何数据都是安全的。永远。
-
@Andrew 但我很确定我从数据库中得到的东西是安全的.. 为什么不应该呢?
-
“相当肯定”是原因之一。 ;)
-
@Stack Guilty 直到被证明是无辜的。
-
数据可以是安全的,但是有效数据中的引号仍然会破坏你的sql语句。也许不是在这种特定情况下,您可能正在谈论一个整数,但一般来说,如果您不准备它(或转义数据......),字符串仍然可以包含字符甚至是破坏或修改您的 sql 语句的 sql。
标签: php mysql pdo prepared-statement