2012-03-19 71 views

回答

16

主要好處是在將查詢輸入傳遞到查詢之前,對查詢輸入進行額外的完整性檢查。另外,對於日期時間值,如果指定了cfsqltype =「CF_SQL_DATE」或=「CF_SQL_TIMESTAMP」,我相信CF會將日期時間字符串正確地轉換爲正確的數據庫格式。

此外,我認爲它使未來的開發人員在閱讀您的代碼時可以看到類型除外更加清晰。

+0

CF還會將任何truey/falsey值轉換爲CF_SQL_BIT(1或0),並將任何數值轉換爲CF_SQL_INT(舍入)。 – Henry 2012-03-19 22:40:11

+0

謝謝您提供的答案!我想這是一些原因,但無法找到文件,這是非常明確和簡潔的 – froadie 2012-03-20 07:58:03

13

我會添加到傑克的評論。在大多數RDBMS中,數據庫需要通過類型查找來運行變量,以確保它是正確的類型,或者可以隱式轉換爲適當的類型。數據庫不會在表或視圖中引入「輸入任何」變量。它必須在執行計劃中建立正確的輸入。因此,如果您不提供類型,則要求數據庫「弄清楚」。

而您指定您正在預佔或預先限定數據類型的類型。引擎知道驅動程序正在呈現某種類型的變量,然後可以直接使用它或直接派生它。

請記住,雖然安全性是使用cfqueryparam的一個很好的理由,但這只是一個原因。另一個原因是創建可以高效執行的正確準備好的語句,並理想地在DB服務器上「彈出」執行計劃緩存。

+2

+1。回覆:* ..你要求數據庫「弄清楚」。* ..結果並不總是你想要的。最好避免隱式轉換。 – Leigh 2012-03-20 00:32:23

+0

謝謝,好點。只是出於興趣 - 它是否需要額外的數據庫開銷來匹配數據類型? (如,在沒有cfsqltype的情況下運行需要稍長的時間,因爲db需要花費時間「弄清楚它?) – froadie 2012-03-20 07:59:46

+0

Froadie - 有一些開銷是的,這很難測量,我確信。你不會看到它,但沒有任何理由我可以想到不使用cfsqltype :) – 2012-03-20 13:23:07