正如其他人所說的,在stringWithFormat
中使用%%
語法使文字百分號出現在搜索字符串中。但是,不要使用你的SQL。只有用價值來做那件事。應避免使用stringWithFormat
將文本值直接插入到SQL中。相反,使用?
佔位符在SQL:
NSString *value = [NSString stringWithFormat:@"%@%%", textbox1.text];
NSString *query = @"Select category from categorytable where category like ?";
然後你sqlite3_stmt
使用query
,然後用value
sqlite3_bind_text
準備。例如:
sqlite3_stmt *statement;
int rc;
if ((rc = sqlite3_prepare_v2(db, [query UTF8String], -1, &statement, NULL)) != SQLITE_OK) {
NSLog(@"%s (%ld)", sqlite3_errmsg(db), (long)rc);
} else {
if ((rc = sqlite3_bind_text(statement, 1, [value UTF8String], -1, SQLITE_TRANSIENT)) != SQLITE_OK) {
NSLog(@"%s (%ld)", sqlite3_errmsg(db), (long)rc);
}
while ((rc = sqlite3_step(statement)) == SQLITE_ROW) {
const unsigned char *string = sqlite3_column_text(statement, 0);
NSLog(@"%s", string);
}
if (rc != SQLITE_DONE) {
NSLog(@"%s (%ld)", sqlite3_errmsg(db), (long)rc);
}
sqlite3_finalize(statement);
}
或者,如果使用FMDB:
FMResultSet *rs = [db executeQuery:query, value];
NSAssert(rs, @"%@", [db lastErrorMessage]);
while ([rs next]) {
NSLog(@"%@", [rs resultDictionary]);
}
[rs close];
這一點很重要,以防止值內的'
人物的出現而引起的問題(例如,如果你正在尋找「 Bob's Bar and Grill「)。
來源
2015-11-14 01:16:29
Rob
謝謝約瑟夫! :] – 2010-11-17 08:37:36