2013-10-13 24 views
1

鍵我有一個似乎與<cfscript>分貝操作找不到qryname14411結構

// traffic tracking 
myQry = new Query(); 
myQry.setSQL("INSERT INTO dbo.Traffic (Circuit, Fuseaction, IP_hash) VALUES (:circuit, :fuseaction, :ip_hash)"); 
myQry.addParam(name="circuit",  value="#listfirst(rc.fuseaction, '.')#", cfsqltype="CF_SQL_VARCHAR"); 
myQry.addParam(name="fuseaction", value="#listlast(rc.fuseaction, '.')#",  cfsqltype="CF_SQL_VARCHAR"); 
myQry.addParam(name="ip_hash",  value="#cgi.remote_addr#",     cfsqltype="CF_SQL_VARCHAR");  
myQry.execute(); 

真正奇怪的是,它看起來像完成操作相關聯的錯誤。這是什麼樣的錯誤?

enter image description here

回答

7

簡短的回答:這可能是一個範圍界定問題。嘗試:

var myQry = new Query(); 


囉嗦waffley答案:

我把它叫做一個Adobe開發人員的福利無用類型的錯誤。

如果您查看該文件的第460行,您會看到錯誤是由於StructFind在變量範圍中查找查詢名稱失敗所致,並且它出現在調試輸入中的原因是因爲有一個嘗試/抓住圍繞它的任何類型。可以實現相同的功能沒有通過用<cfif StructKeyExists(variables,tagAttributes['name']) >替換try/catch來引起/捕獲錯誤,這是基本的CFML知識,並且肯定CF產品的開發人員應該知道的東西!

相同的代碼仍然存在於base.cfc的CF10版本中,因此您可能覺得或不想將它作爲Adobe的CF bugbase中的錯誤提交 - 雖然它們不太可能將它修復爲CF9(並且不確定它們是否「我覺得CF10也是值得的)。

但是,這隻會側面推動變量不存在的問題,不能解決實際問題爲什麼它實際上不存在。假設調試信息顯示查詢成功執行,並且查詢代碼基本上位於該行的上方(從第442行開始),它不應該是重複/常見錯誤,但可能由於您的myQry變量而導致不在作用域中,因此它可能與執行new Query().execute()行之間發生的另一個也稱爲myQry的變量(甚至是與函數的單獨調用相同的變量)發生衝突,從而導致原始查詢當StructFind查找它時不在那裏。

的解決方案是把關鍵字var首先使用myQry之前,將其放置在局部範圍內該功能 - 這應該是隻爲一個實例中使用的所有變量來完成函數(否則它們被放置在函數所在的組件/請求的變量範圍內)。

+0

我指定了本地範圍,並且出現相同的錯誤。我想繼續引用變量爲local.svc而不是「var svc」,但至少現在我知道爲什麼我會收到警告消息! –

+0

它看起來像我必須回去並把var local = {}放到我所有的函數中。 –