在MySQLi中使用預準備語句有什麼好處?爲什麼MySQLi準備語句?
如果唯一的目的是確保查詢的安全性,那麼使用類似mysqli_real_escape_string
的方法清理查詢不是更好,而不是爲每個查詢編寫如此多的代碼行(如prepare,bind_param,execute,close等) ?
在MySQLi中使用預準備語句有什麼好處?爲什麼MySQLi準備語句?
如果唯一的目的是確保查詢的安全性,那麼使用類似mysqli_real_escape_string
的方法清理查詢不是更好,而不是爲每個查詢編寫如此多的代碼行(如prepare,bind_param,execute,close等) ?
準備語句不僅僅是爲了代碼的安全性。它有助於SQL服務器解析您的語句併爲您的查詢生成執行計劃。
如果您運行SELECT 1000次,則SQL服務器將不得不解析,準備並生成有關如何獲取數據1000次的計劃。
如果您準備語句,然後運行準備好的語句,每次使用不同的綁定值1000次,那麼語句只會被解析一次,並且每次都使用相同的查詢計劃。
這不僅有助於您在腳本中運行1,000個查詢,而且如果您只有1條語句並運行腳本1,000次,服務器可以記住計劃服務器端。下一次腳本運行時,它將再次使用相同的計劃。
確定對於一個或兩個查詢看起來可能微不足道,但是當您開始執行大量查詢或重複執行相同的查詢時,您將節省大量處理時間。
有幾個優點:
WHERE $x = 4
,如果$x
爲空,您將收到語法錯誤,但WHERE ? = 4
將起作用。
執行時間和查詢緩存。 – zzzzBov 2011-03-04 23:08:27