2015-02-08 70 views
0
[self openDB]; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *set = [defaults stringForKey:@"defaultSet"]; 
if ([set length] > 0) { 
    NSString *trySql = [NSString stringWithFormat:@"SELECT setName FROM setData WHERE setName = `%@`", set]; 
    sqlite3_stmt *tryStatement; 
    if (sqlite3_prepare_v2(db, [trySql UTF8String], -1, &tryStatement, nil)==SQLITE_OK) { 
     NSLog(@"set here"); 
    } else { 
     NSAssert(0, @"%s", sqlite3_errmsg(db)); 
     sqlite3_close(db); 
    } 
} 

所以我返回reason: 'no such column: set'sqlite3的WHERE语句发出

错误现在,这是我会怎么写,通常只是我会用PDO ::技术.PHP但在目标C是有所不同的。我不确定我是否正确使用它。

我是否需要绑定某种类型的值,或者我是否想要使用行名和/或查找列名?

+2

看起来像你的值中引号的错误类型,但的确使用绑定参数。 – Mat 2015-02-08 09:26:26

+0

@Mat看来改变引号的简单技巧解决了我的问题,然后我可以检查行来确定nsdefault是否仍然适用。这样一个简单的修复一个小时的头痛!谢谢,如果您发布了答案,我会接受。 – user2415313 2015-02-08 09:49:41

+0

啊哈,如果@Mat不想要,你也可以发布你自己的答案。 – 2015-02-08 16:45:04

回答

0

反引号用于引用列名称。 (SQL实际使用双引号,反引号只用于与MySQL的兼容性支持。)

在SQL中,字符串用直单引号括起来:

... WHERE `SomeColumn` = 'SomeString' 

在任何情况下,你应该use parameters代替。

+0

太多的MySQL钻进我的大脑我认为,感谢一堆,(不是说这是MySQL的btw正确的方法) – user2415313 2015-02-08 16:56:30