0

我正在创建一个下载 XML 并将其值插入 SQLite3 数据库的应用程序。每当有 时它都会出错',所以我创建了这个函数来转义字符串:

+(NSString *)escapeString:(NSString *)string {
  NSRange range = NSMakeRange(0, [string length]); 
  NSMutableString *str =
    [NSMutableString stringWithString:string];  
  [str replaceOccurrencesOfString:@"'" withString:@"\\\'" options:0 range:range];
  return str; 
}

问题是数据库现在出现了错误unrecognized token: "\"。我究竟做错了什么?顺便说一句,我仍在使用 Tiger,这可能与拥有旧版本的 SQLite 有关吗?如果是,我该如何解决?请注意,我正在创建的应用程序也必须在 Tiger 上运行,最好在 Panther 上运行。

4

1 回答 1

1

SQL 不会使用斜杠字符进行转义。它使用单引号'在字符串中转义。

INSERT INTO xyz VALUES('5 O''clock');

参考

所以我假设(我不知道你使用的是什么语言)这一行:

[str replaceOccurrencesOfString:@"'" withString:@"\\\'" options:0 range:range];

实际上应该是:

[str replaceOccurrencesOfString:@"'" withString:@"''" options:0 range:range];

您自己擦洗内容是违反最佳实践的。最好使用 sqlite 的绑定工具。

而不是自己进行字符串操作:

sql = "INSERT INTO xyz VALUES('"+ my_value +"');"

你会使用这样的东西:

sql = "INSERT INTO xyz VALUES(?1);"

然后使用绑定调用来分配?1.

于 2012-07-25T22:00:28.303 回答