2014-03-31 44 views
1

我正在使用ColdFusion9和MySQL 5.0。我不知道爲什麼查詢名變量在插入和更新查詢中未定義,即使我已經在查詢之前聲明瞭這些變量。這裏是示例代碼。爲什麼在ColdFusion中未定義插入和更新查詢名稱變量

<cfset variables.test_update = QueryNew('')> 
<cfset variables.res = ''> 
<cfquery name="variables.test_update" datasource="dsnTest" result="variables.res"> 
    INSERT INTO test(
     name 
     , rank 
    )VALUES(
     'test' 
     ,23 
    ) 
</cfquery> 
<cfdump var="#variables.res#"> 
<cfdump var="#variables.test_update#"> 

這裏的結果屬性值是可用的,但對於查詢名稱變量,它拋出未定義的錯誤,「元素TEST_UPDATE是變量不確定的。」

我知道,插入,更新和刪除查詢不會通過查詢名稱屬性返回任何結果集。但是,我不確定爲什麼查詢名稱變量在查詢執行後變得未定義?

請幫忙。

+0

當你指定一個結果屬性時,我的理解是它取代了返回任何信息到query_name屬性,所以你需要使用variables.res,你通常使用query_name – barnyr

+0

@barnyr,我刪除了「變量「範圍從query_name,但它不能解決錯誤。 –

+1

@barnyr - 你錯了。結果實際上是關於查詢的元信息,而不是行本身。這些文檔確切地說明了所涵蓋的內容,但它們是不同的信息,然後是行本身。 –

回答

7

ColdFusion使用DB驅動程序返回的任何內容填充variables.test_update,在這種情況下,它是[nothing]。

而CF認爲空變量是未定義的。總是有。

0

繼亞當說,如果你想返回新記錄的新ID(如果你的表被設置來處理這個),你可以按如下更改:

INSERT INTO test(
    name 
    , rank 
)VALUES(
    'test' 
    ,23 
); 
Select LAST_INSERT_ID() as newid; 

,如果你甩「variables.test_update」,你會看到它現在不是空的,返回一行,列「newid」。

+4

你不需要這樣做。如果您使用結果屬性,那麼新的ID將在您的結構中返回。更好的是,它是跨平臺的(db平臺)。 –

+0

@cf_phil,我不想獲取新插入的行的ID,而是試圖知道爲什麼該查詢名稱變量未定義。 –

+0

我知道 - 我只是想強調一下,雖然你的變量沒有定義,因爲你的查詢沒有返回任何東西,但是如果你在你的cfquery中請求了數據,它就會被定義(例如,通過在cfquery標籤中添加一個後續查詢 - 如果你需要它)。 –