你不當創建查詢。切勿使用字符串格式來構建查詢字符串。最有可能你正在做類似:
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注入攻擊。
@downvoter - 請解釋反對票。 – rmaddy
如果字符串以'或'結尾怎麼辦? 對我來說,它沒有任何線索來處理這個問題? –
@Dhanunjay這是使用sqlite3_bind_text的一點,它正確地轉義了所有特殊字符。 – rmaddy