2
SELECT name FROM customers WHERE location = ? AND active = '1'

在此查询中,位置的值将来自不受信任的来源,但活动的值将始终为 = 1。我将 PDO 用于 php/mysql。

我还应该参数化active的值吗?
如果active不是一个常数,而是来自一个不断变化且受信任的来源,我还应该参数化吗?(即缓存的好处?)

4

1 回答 1

3

不,参数化常量值没有任何好处。

参数化的目的是允许应用程序数据与 SQL 表达式安全重复地组合。安全的部分是防止 SQL 注入。重复部分是为了让您可以使用不同的值再次执行准备好的查询,这可能使 RDBMS 不必重新解析和重新优化查询。

如果您始终在查询中使用相同的常量值,这些都不是问题。您不会面临来自硬编码值的 SQL 注入风险,如果需要,您可以重新执行查询,而无需重新解析。

没有进行参数缓存。如果有的话,使用准备好的语句会使MySQL更难缓存结果(即查询缓存对缓存来自准备好的语句的结果有限制)。但是,一旦您使用准备好的语句,它是否具有一个参数与两个或多个参数都无关紧要。


我确实想知道为什么您将整数放在引号中。我看到很多,但我不知道这是如何开始的,也不知道谁认为有必要。

于 2013-07-20T00:14:42.730 回答