2012-04-19 41 views
0

我試圖做一個FMDB插入與此代碼:對象 - 抱怨領域是「表達結果未使用」

dbCmd = @"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(?,?,?,?,?,?)", 
txtSiteID.text, 
[txtSTA.text floatValue], 
[txtElev.text floatValue], 
txtSiteDesc.text, 
[NSNumber numberWithInt:0], 
currentDate; 

每個不受「浮動值」修改了3文本字段方法調用出現錯誤: 「表達式結果未使用」導致參數計數關閉,進而導致FMDB崩潰。

我沒有看到任何問題與書面的代碼...有人可以啓發我,我需要改變,讓這個工作?

回答

0

這裏的答案:

dbCmd = [NSString stringWithFormat: @"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(%@, %f, %f, %@, %d, %@)", 
    txtSiteID.text, 
    [txtSTA.text floatValue], 
    [txtElev.text floatValue], 
    txtSiteDesc.text, 
    [NSNumber numberWithInt:0], 
    currentDate]; 

作品就像一個冠軍!謝謝大家的意見。我很感激!

0

dbCmd是什麼類型的對象?如果是字符串,則需要使用[NSString stringWithFormat:]和適當的字符串百分比編碼。您不能僅僅添加NSString常量(@"")上的參數。

編輯:看凱文的答案。

+0

真的不好主意。這就是SQL注入漏洞的創建方式。 – 2012-04-19 00:22:31

+0

是的,在我發佈之後就意識到了。我不熟悉FMDB的方法,所以我只是給出了一個通用的「這就是爲什麼編譯器正在翻轉」,但我已經提出了你的答案,因爲它好多了。 – 2012-04-19 00:26:06

4

我覺得你非常困惑。代碼

dbCmd = @"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(?,?,?,?,?,?)", 
txtSiteID.text, 
[txtSTA.text floatValue], 
[txtElev.text floatValue], 
txtSiteDesc.text, 
[NSNumber numberWithInt:0], 
currentDate; 

不會像您想象的那樣用佔位符創建語句。它運行了大量由comma operator分隔的表達式。變量dbCmdcurrentDate的值結尾,並且所有其他表達式的值被丟棄。編譯器警告你正在編寫未被使用的表達式。

我認爲你需要做的是一樣的東西

[db executeUpdate:@"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(?,?,?,?,?,?)", 
    txtSiteID.text, 
    [txtSTA.text floatValue], 
    [txtElev.text floatValue], 
    txtSiteDesc.text, 
    [NSNumber numberWithInt:0], 
    currentDate]; 
+0

我拿了你的代碼,修改了「db」到「fmdb」並運行它......沒有得到那個特定的錯誤了,但它在FMDB中快死了......似乎它沒有得到參數......我在想關於刪除FMDB並使用直接的SQLite ... XD XD(傑克,你會認識到的!) – SpokaneDude 2012-04-19 01:07:43