ColdFusion 的 cfqueryparam 標記提供了一種便捷的機制,可以將值動態綁定到 SQL 查詢。但是,使用不當可能會導致意外結果,例如空白 CFCharts。
使用日期值參數化查詢時,必須指定正確的cfsqltype 作為參數。如本例所示,使用不正確的 cfsqltype(例如 CF_SQL_TIMESTAMP)進行 YEAR() 和 MONTH() 比較可能會中斷查詢的執行。
不正確的程式碼:
<code class="coldfusion"><CFQUERYPARAM Value="#month#" cfsqltype="CF_SQL_TIMESTAMP"> <CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_TIMESTAMP"></code>
使用錯誤的cfsqltype 會導致參數值與資料庫中的比較列之間的類型不符。例如,YEAR() 傳回一個四位整數,而 CF_SQL_TIMESTAMP 表示完整的日期/時間物件。這種不匹配會導致比較不正確:
<code class="text">2014 = {ts '2009-02-13 23:31:30'}</code>
底層資料庫自動將參數值轉換為數字,導致比較錯誤,查詢沒有找到符合的記錄。
要解決該問題,請為參數指定適當的cfsqltype,確保資料類型與資料庫中的欄位類型相符:
<code class="coldfusion"><CFQUERYPARAM Value="#month#" cfsqltype="CF_SQL_INTEGER"> <CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_INTEGER"></code>
替代方法:
作為參數化各個日期組件的替代方法,更好的方法是使用cf_sql_date 作為cfsqltype 進行日期比較:
<code class="coldfusion"><CFQUERYPARAM Value="#dateFormat(theMonth,"yyyy-mm-dd")#" cfsqltype="CF_SQL_DATE"></code>
這種方法對索引更加友好,無論目標列包含日期或日期/時間值,都能確保準確的比較。
以上是使用日期值的參數化查詢時,為什麼我的 ColdFusion cfcharts 為空?的詳細內容。更多資訊請關注PHP中文網其他相關文章!