2010-05-03 38 views
4

當我運行下面的代碼:是否有可能使用cfquery的結果重新綁定sql參數?

<cfquery name="someQuery" result="queryResult" datasource="wetakepictures"> 
    SELECT id 
    FROM events 
    WHERE category_id = <cfqueryparam value="1" cfsqltype="cf_sql_integer"> 
    OR title like <cfqueryparam value="%test%" cfsqltype="cf_sql_varchar"> 
</cfquery> 

<cfoutput> 
    #queryResult.sql# <br /> 
    #ArrayToList(queryResult.sqlparameters)# 
</cfoutput> 

它輸出:

SELECT id FROM events WHERE category_id = ? OR title like ? 
1,%test% 

我需要實際的字符串 「SELECT ID FROM事件WHERE CATEGORY_ID = 1或標題LIKE '%測試%'」。

有沒有辦法將參數重新綁定到sql?

---- ----編輯

之所以這樣做,這是分頁結果時,以消除重複的SQL。我願做這樣的事情:

<cftransaction> 
    <cfquery name='getCount' result='queryResult'> 
    SELECT count(*) 
    ... conditions that are guarded by <cfif> ... 
    </cfquery> 

    <cfquery name='getLimitedRecords'> 
    #replace(queryResult.sql, 'count(*)', 'id')# 
    LIMIT ... based on pagination ... 
    </cfquery> 
</cftransaction> 

注:我已經看了這個question,並決定使用兩個查詢與MySQL。

+0

爲什麼你需要這樣做?這聽起來像你想做的事情是不可能的,但如果你有一個目標,我們可以幫助你達到這個目標沒有這一步... – 2010-05-03 13:40:20

+0

我想我明白你爲什麼想要做這是因爲我想過這一次。實際上,由於已經有其他更好的解決方案,所以它不是很好的分頁方法。如果您始終需要count(id),則需要緩存幾分鐘,具體取決於這些記錄更改的頻率。第二個查詢也可以緩存用於用戶來回的情況。恕我直言限制+ ofset +如果其他params的順序應該在所有可能的情況下罰款。如果不是,你可以把簡短的說明。你想要達到的目標。 – 2010-05-03 18:22:07

+0

我也不明白cftransaction是什麼。 – 2010-05-03 18:25:41

回答

1

兩種方法,這取決於你正在嘗試做的事:

Ben Nadel:Merging ColdFusion SQL Debugging And Query Params With Javascript - 如果你想要的是複製和粘貼有用

A better debugging template - 如果你想進行反向工程的代碼重構有用的在代碼中查詢並執行一些日誌記錄等。

+0

感謝您的鏈接,但他們不會做伎倆。它需要在服務器端完成,所以Nadel的方法已經完成。更好的調試模板只是使用字符串替換來重新綁定參數,因此重建後的查詢容易受到sql注入的影響。 – 2010-05-03 13:31:23

+0

它是如何易受影響的 - 如果您正在執行此服務器端並將查詢保留在會話範圍內,它永遠不會靠近用戶。無論如何,我不確定你的想法是否是一個偉大的分頁方法,並且感覺像是不成熟的優化 – Antony 2010-05-03 21:24:03

相關問題