2015-02-08 68 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