1

我正在使用 sql 查询来获取数据。我的查询是

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

得到的outlineTitle单引号,即使数据库有数据,也没有从数据库获取数据。如果我放另一个outlineTitle没有任何特殊字符的,它的工作......

请帮帮我....提前谢谢...

4

1 回答 1

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

于 2013-02-07T16:25:11.697 回答