2012-04-12 21 views
1

有點令人困惑的標題,但我會盡量在此澄清。當使用<cfscript>內的查詢對象,你必須在表單中的一些SQL:SQL查詢中的單引號ColdFusion組件中的cfscript內部的查詢對象

SELECT city + ', ' + state + ' ' + zip as Address2 
FROM users WHERE user_id = :userid 

的ColdFusion會報錯了。 :userid是我使用addParam添加的參數,當我刪除狀態和zip之間的' '時,查詢完美工作。出於某種原因,添加該空間會導致查詢對象出現重擊,並且在符號附近給我提供的語法不正確。

此查詢也工作正常,當我只使用<cfquery>,但我想在<cfscript>中使用它。有任何想法嗎?這是一個錯誤?或者我錯過了什麼?

編輯:我正在使用Coldfusion 9,MS SQL 2005,這是使用cfscript語法在CFC內完成的。像這樣:

component 
{ 
    public function getAgent(member_id) 
    { 
    qryAgent = new query(dataSource="Members"); 
    qryAgent.setName("get_agent"); 
    qryAgent.addParam(name="memberid",value=member_id,cfsqltype="CF_SQL_INTEGER"); 

    result = qryAgent.execute(sql="SELECT FirstName, LastName, FirstName + ' ' + LastName as FullName FROM Member m WHERE m.member_id = :memberid"); 
    return result.getResult(); 
    } 
} 
+0

只是一個猜測,但是你的查詢在單引號包圍的字符串中,要麼是轉義內部引號,要麼將外引號改爲雙引號? – BennyB 2012-04-12 15:46:26

+0

這三列是同一類型的嗎?所有的char或varchar()? – 2012-04-12 15:56:41

+0

是的。再次,當我刪除+'',每一個完美的作品。 – derickito 2012-04-12 15:59:09

回答

1

經過調試和找到我發現,別人就已經回答發現這裏:http://forums.adobe.com/thread/683656?tstart=-4和Adobe已經修復它在CF 9.0.1

問題出現在ColdFusion9 \ CustomTags \ com \ adobe \ coldfusion \ query.cfc文件夾中的query.cfc文件。 replaceDelimsWithMarkers函數調用listtoarray(我的版本中的第346行)。這個調用沒有將第三個參數includeEmptyFields設置爲true,這導致我的sql字符串變形。

這可以通過添加true的第三個參數手動修復。

1

從發佈的代碼中,您的語法對於MS SQL來說看起來很穩定。我在安裝了ACF 9和MS SQL Server 2008的本地機器上運行了以下測試(我知道你在2005年,但它應該與字符串連接類似)。

<cfscript> 
    qry = new query(); 
    qry.setDatasource("mydsn"); 
    qry.setName("myqry"); 
    qry.addParam(name="userid",value="3735",cfsqltype="cf_sql_integer"); 
    result = qry.execute(sql="SELECT firstname + ' ' + lastname AS fullname FROM mydb where userid = :userid"); 
    writeDump(result); 
</cfscript> 

在瀏覽器中運行此命令會返回正確連接的「全名」值。

偶然的機會,這個代碼片段是否有助於發現您的完整cfscript查詢中的任何異常?如果沒有,是否有可能發佈更多的代碼,因爲它與設置查詢服務有關?

編輯:我也用下面的跑了「的結果=」表達式來使它更像拼接你正在做的:

result = qry.execute(sql="SELECT firstname + ', ' + lastname + ' ' + email AS fullname FROM mydb where userid = :userid"); 
+0

這正是我在做什麼。我最小化了我的查詢來測試究竟是什麼原因造成的我發現如果我刪除了參數:userid,那麼一切正常,或者如果我刪除了'',那麼一切正常。 CF9的構建是9,0,0,251028。不知道這與它有什麼關係 – derickito 2012-04-12 18:11:09

+0

我沒有提到這是在CFC中完成的,可能與它有關。我編輯了我的問題來反映他的觀點。 – derickito 2012-04-12 18:20:15

+0

@derickito我想它是在CFC所以不用擔心!我剛剛創建了一個類似的表(成員的列名爲FirstName,LastName和member_number)。然後,我添加了一些虛擬數據並按照上面的提供進行了查詢。一切都很完美。你在原文中提到ColdFusion會「出錯」。你能發佈某種形式的錯誤信息嗎?編輯:我在ACF 9.0.1,但我不記得在9.0.1這種更新的任何細節,但會檢查。 – 2012-04-12 19:09:19