我正在构建在Xcode中包含双引号(“)的数据库查询。 例如,我有这行代码来生成我的查询:
NSString *query = [NSString stringWithFormat:@"SELECT id FROM site WHERE name = \"%@\"", siteName];
,其中
siteName = "TestSite"
在Xcode 5中一切正常我会得到正确的字符串:
query = "SELECT id FROM site WHERE name = "TestSite""
升级到Xcode 6后,如果我运行完全相同的代码,那么转义序列不起作用,我得到:
query = "SELECT id FROM site WHERE name = \"TestSite\""
我甚至尝试用双引号(34)的ASCII代码替换转义序列,如下所示:
NSString *query = [NSString stringWithFormat:@"SELECT id FROM site WHERE name = %c%@%c", 34, siteName, 34];
我仍然得到
query = "SELECT id FROM site WHERE name = \"TestSite\""
有谁知道为什么会这样?在Xcode 6中是否有一些不同的设置?
答案 0 :(得分:1)
NSString *query = [NSString stringWithFormat:@"SELECT id FROM site WHERE name = ?"];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)
== SQLITE_OK) {
sqlite3_bind_text(statement, 1, [name UTF8String], -1, NULL);
@rmaddy正在谈论这个问题,这绝对是最佳选择。在我开始像这样绑定之前,我一直没有尝试按照你的方式做到这一点。