sqlite无法识别特殊字符

时间:2013-02-07 16:07:10

标签: objective-c sqlite

使用sql查询获取数据..我的查询是

select * from green where outlineDate between '2013-01-01' and '2013-12-31' and outlineTitle = 'That's Alright'

outlineTitle得到了单引号,即没有从db获取数据,尽管db有数据。如果我把另一个outlineTitle没有任何特殊字符,它的工作......

请帮帮我们......先谢谢你们......

1 个答案:

答案 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注入攻击。