2011-09-23 116 views
0

即使参数始终相同,我是否应该为每个参数使用占位符?那么空值怎么样?我是否也应该为他们使用占位符?我应该声明哪些参数为sql占位符?

我有兴趣避免准备并启用查询的缓存。我使用mysql,php和pdo,但我认为这与其他数据库也是一样的。安全不是一个交易,因为问题中的参数是硬编码的。

案例1:我应该使用占位符进行可视性还是硬编码值1更好? select * from where where visibility = 1 and product =:id

案例2:我应该使用null的占位符吗? (对于两种情况它是一样的) select * from t1 where color is null update t1 set color = null where product =:id

回答

1

如果参数是硬编码的,则根本没有占位符的用处。
默认情况下,由MySQL启用查询缓存,因此您不必担心。

因此,如果确实没有动态更改的参数,则在准备和执行时没有用处。只需使用PDO查询方法。

但是,您的标题Which parameters should I declare as sql placeholders?的问题更有趣。

就这个笨拙的PDO库而言,您必须仅为数据使用占位符。 但是在动态创建SQL查询方面,您必须使用适当的占位符来查询的每个可变部分的

+0

'这些例子被简化了.'这是你的错。以及误导'我有兴趣避免准备''当'通常都有动态变化和无变化的变量'时,这种说法不可能是真实的。'你必须改写你的问题以使它不那么模糊。并且没有空值的占位符,如果这是您的问题 –

+0

抱歉。我不想让你生气:( – viljun

+0

我没有生气有点:)只是我想说的是:你必须改写你的问题,使其不那么模糊。如果你有:id动态,没有办法逃避绑定,不是吗?那么,那么问题是什么? –