我正在使用Objective-C通过C API使用sqlite。我的应用程序的一个预期功能是,用户可以搜索人名,并在输入每个新字符时执行使用LIKE的SQL查询以查找所有符合条件的人名。我遇到的问题是在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.");
}
基本上,searchText
是我想要从中获取名称的地方,但目前我认为它只是在搜索名字包含 ?
的人,因为在 '%?%'
中有单引号。 有没有解决这个问题的方法,仍然让我使用参数化查询(防止 SQL 注入),并实现我想要的结果?