Bry*_*mas 5 c sqlite objective-c sql-like
我sqlite通过C API在Objective-C中使用.我的应用程序的一个预期功能是用户可以搜索人名,并且对于他们输入的每个新字符,执行SQL查询LIKE以查找名称符合匹配条件的所有人.我遇到的问题是参数化LIKE中的匹配,而不是按字面解释问号.也就是说,我相信目前的应用程序正在寻找包含?在其中的人名(没有人).
我的代码看起来像这样:
const char *sql = "SELECT rowid, name, email FROM person WHERE name LIKE '%?%'";
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
NSLog(@"Problem preparing getFilteredPeopleStubs statement.");
}
if(sqlite3_bind_text(sqlStatement, 1, [searchText UTF8String], -1, SQLITE_TRANSIENT) != SQLITE_OK){
NSLog(@"Problem binding search text param.");
}
Run Code Online (Sandbox Code Playgroud)
基本上,searchText我希望这个名字来自哪里,但目前我认为它只是搜索名字中包含的人?,因为单引号'%?%'.是否有一个解决这个问题的方法仍然允许我使用参数化查询(防止SQL注入)并实现我所追求的目标?
把%角色放进去searchText,就像(借口双关语)这样:
const char *sql = "SELECT rowid, name, email FROM person WHERE name LIKE ?";
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
NSLog(@"Problem preparing getFilteredPeopleStubs statement.");
}
NSString *bindParam = [NSString stringWithFormat:@"%%%@%%", searchText];
if(sqlite3_bind_text(sqlStatement, 1, [bindParam UTF8String], -1, SQLITE_TRANSIENT) != SQLITE_OK){
NSLog(@"Problem binding search text param.");
}
Run Code Online (Sandbox Code Playgroud)