2

我在我的项目中运行动态 LIKE 语句时遇到问题:这个查询就像一个魅力,并返回所有名称中带有“t”的项目:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%t%%'";

当我尝试动态执行此操作时,我没有收到错误,而只是一个空结果。似乎该值为空。我尝试绑定一个输出正确值的字符串值's'

NSLog(@"bbc_ : search menu items from db based on: %@",s);
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
sqlite3_bind_text(statement, 1, [s UTF8String],-1,SQLITE_TRANSIENT);

我应该如何绑定这个值而不是使用:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";
4

2 回答 2

4

刚刚在http://www.innerexception.com/2008/10/using-like-statement-in-sqlite-3-from.html找到了一个很好的解释

我更改了以下几行:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE ?001";

NSString *searchInput = [NSString stringWithFormat:@"%@%%", s];
sqlite3_bind_text(statement, 1, [searchInput UTF8String],-1,SQLITE_TRANSIENT); 
于 2010-04-15T08:44:29.983 回答
1

你实际上可以说

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%t%'";

(注意单%-s)

于 2012-01-22T19:39:29.273 回答