2012-04-19 79 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