2012-07-25 36 views
0

我正在創建一個應用程序,下載一個XML並將其值插入到SQLite3數據庫中。它給了一個錯誤,每當有一個',所以我創造了這個功能來逃避字符串:轉義字符串時出現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; 
} 

的問題是,現在,數據庫gimming錯誤unrecognized token: "\"。我究竟做錯了什麼?順便說一句,我仍然在使用Tiger,它可能與舊版本的SQLite有關嗎?如果是的話,我該如何解決?請注意,我正在創建的應用程序還必須在Tiger上運行,最好在Panther上運行。

回答

1

SQL不會以斜線字符轉義。它使用單引號'在字符串內轉義。

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

Reference

所以我認爲(我不知道你使用的是什麼語言)這一行:

[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內容。

相關問題