使用sql查询获取数据..我的查询是
select * from green where outlineDate between '2013-01-01' and '2013-12-31' and outlineTitle = 'That's Alright'
outlineTitle
得到了单引号,即没有从db获取数据,尽管db有数据。如果我把另一个outlineTitle
没有任何特殊字符,它的工作......
请帮帮我们......先谢谢你们......
答案 0 :(得分:1)
您正在不正确地创建查询。切勿使用字符串格式来构建查询字符串。你最有可能做的事情是:
NSString *title = ... // some title that might have "special characters"
NSString *query = [NSString stringWithFormat:@"select * ... and outlineTitle='%@'", title];
这是创建查询的一种非常糟糕的方法。正确的方法是使用准备好的陈述。
NSString *title = ... // some title that might have "special characters"
sqlite3_stmt *stmt = NULL;
sqlite3_prepare_v2(dbHandle, "SELECT * FROM green WHERE outlineTitle = ?", -1, &stmt, nil);
sqlite3_bind_text(stmt, 1, [title UTF8String], -1, SQLITE_TRANSIENT);
在您的查询中使用?
,然后使用正确的sqlite3_bind_xxx
方法,所有值都会被正确转义并引用。这解决了单引号和其他字符的问题。这也解决了潜在的SQL注入攻击。