sqlite3 WHERE语句问题
sqlite3 WHERE statement issues
[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);
}
}
所以我return一个错误reason: 'no such column: set'
现在,这就是我通常的写作方式,除了我会使用 PDO:: 技术。php 但在 objective c 中它有些不同。我不确定我是否正确使用它。
我是否需要某种类型的 bindValue,或者我是否正在尝试查找具有行名称的列名称 and/or..?
反引号用于引用列名。
(SQL 实际上使用双引号,支持反引号只是为了与 MySQL 兼容。)
在SQL中,字符串用直单引号引起来:
... WHERE `SomeColumn` = 'SomeString'
无论如何,你应该use parameters。
[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);
}
}
所以我return一个错误reason: 'no such column: set'
现在,这就是我通常的写作方式,除了我会使用 PDO:: 技术。php 但在 objective c 中它有些不同。我不确定我是否正确使用它。
我是否需要某种类型的 bindValue,或者我是否正在尝试查找具有行名称的列名称 and/or..?
反引号用于引用列名。 (SQL 实际上使用双引号,支持反引号只是为了与 MySQL 兼容。)
在SQL中,字符串用直单引号引起来:
... WHERE `SomeColumn` = 'SomeString'
无论如何,你应该use parameters。