SELECT name FROM customers WHERE location = ? AND active = '1'
在此查询中, location 的值来自不受信任的来源,但 active 的值将始终为= 1.我正在使用PDO对于php / mysql。
我是否还要参数化活动的值?
如果活动不是常量,而是来自不断变化且受信任的来源,我还应该参数化吗?(即缓存优势?)
答案 0 :(得分:3)
不,参数化常量值没有任何好处。
参数化的目的是允许应用程序数据与SQL表达式安全和重复组合。安全部分是为了防止SQL注入。重复部分是这样您可以使用不同的值再次执行准备好的查询,这可能会使RDBMS无需重新解析和重新优化查询。
如果您始终在查询中使用相同的常量值,则这些都不是问题。您不会受到硬编码值的SQL注入风险,如果需要,您可以重新执行查询,而无需重新解析。
没有缓存参数。如果有的话,使用预准备语句会让MySQL 更难来缓存结果(即query cache has limitation on caching results from prepared statements)。但是一旦你使用预备语句,它是否有一个参数而不是两个或更多是无关紧要的。
我想知道你为什么把整数放在引号中。我看到了很多,但我不知道它是如何开始的,或者谁认为这是必要的。