我正在使用 sql 查询来获取数据。我的查询是
select * from green where outlineDate between '2013-01-01' and '2013-12-31' and outlineTitle = 'That's Alright'
得到的outlineTitle
单引号,即使数据库有数据,也没有从数据库获取数据。如果我放另一个outlineTitle
没有任何特殊字符的,它的工作......
请帮帮我....提前谢谢...
我正在使用 sql 查询来获取数据。我的查询是
select * from green where outlineDate between '2013-01-01' and '2013-12-31' and outlineTitle = 'That's Alright'
得到的outlineTitle
单引号,即使数据库有数据,也没有从数据库获取数据。如果我放另一个outlineTitle
没有任何特殊字符的,它的工作......
请帮帮我....提前谢谢...
您正在不正确地创建查询。永远不要使用字符串格式来构建查询字符串。您很可能正在做类似的事情:
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 注入攻击。