2014-02-06 66 views
3

如果一個參數是整數,並不是來自用戶輸入,它是一個變量,我設置爲$type = 5;,我是否還需要爲它做一個佔位符,就像我對來自用戶輸入(WHERE type = ?)的參數所做的那樣?它有什麼好處嗎?即使我知道參數的類型,是否需要準備語句?

+1

如果你用單向而不是兩種方式做事情總是比較簡單:) –

+0

從技術上說:沒有。爲了清楚和未來打樣,也許是的。 – deceze

+0

也值得一讀:http://stackoverflow.com/questions/535464/when-not-to-use-prepared-statements – halfer

回答

3

出於安全原因,您可以在任何地方進行參數設置是一個不錯的主意,但您不必這樣做。參數化查詢更有可能受益於查詢緩存的效果,但您是否會看到性能優勢取決於您的方案。

有些情況下您需要直接添加SQL;例如,列和表名不能被參數化。只要仔細過濾這些,你會沒事的。

1

我只是爲了安全目的而使用準備好的語句。雖然參數不是直接來自用戶輸入,但有人可能能夠在其中注入有害代碼。可能會破壞你的sql數據庫

+1

嗯如何?如果更改代碼是可能的,我認爲準備Stamement不會有幫助:)我認爲這兩種方式都是安全的,但我想知道除了安全性之外,是否還有其他準備語句的優勢?在這種情況下的問題 –

+1

你能100%保證該值永遠不會取決於用戶輸入嗎?也許有幾個月有變化,你忘記了這個值是直接在sql查詢中設置的。另外,我會去創建你的SQL語句的一種風格,不要混淆。 – tea2code

+0

@ tea2code:如果數據庫代碼中的所有內容都沒有被識別,就沒有問題。我同意參數化雖然在可能的情況下更好的觀點。 – halfer

相關問題