sqlite3 WHERE语句问题

时间:2015-02-08 09:20:37

标签: objective-c sqlite

[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'

的错误

现在,这就是我通常会写的方式,除了我会在.php中使用PDO ::技术,但在目标c中它有些不同。我不确定我是否正确使用它。

我是否需要某种bindValue,或者我是否想要找到一个带有行名和/或..的列名?

1 个答案:

答案 0 :(得分:0)

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

在SQL中,字符串用单引号引用:

... WHERE `SomeColumn` = 'SomeString'

无论如何,你应该use parameters代替。