大家好,祝大家聖誕快樂!fmdb - 選擇與喜歡的查詢,以避免sql注入
我正在構建一個使用sqlite和fmdb作爲包裝的iOS應用程序。 我試圖執行下面的SQL語句:從一個UISearchBar來的文本
SELECT * FROM TABLE WHERE FIELD LIKE '%text%'
。
截至目前唯一的辦法,我得到它的工作是用下面的代碼:
NSString *query = [NSString stringWithFormat:@"SELECT * FROM TABLE WHERE FIELD LIKE '%%%@%%'", text];
FMResultSet *results = [db executeQuery:query];
請注意我張貼僅查詢代碼。它運作良好。
我想,雖然什麼,是爲了避免SQL注入,所以我想是這樣的:
NSString *query = @"SELECT * FROM TABLE WHERE FIELD LIKE %%?%%";
FMResultSet *results = [db executeQuery:query, text];
或類似的東西:
NSString *query = @"SELECT * FROM TABLE WHERE FIELD LIKE ?";
FMResultSet *results = [db executeQuery:query, [NSString stringWithFormat:@"%%%@%%", text]];
不工作。同樣的情況發生在like子句('%%?%%')或單個%而不是double的單引號內。
你可以引導我解決這個問題嗎? 任何幫助將不勝感激!
新年快樂!
+1我喜歡你正確處理這個事實。太多的人在用戶提供的字段中使用'stringWithFormat'輕鬆地構建他們的SQL,而不考慮在用戶字段中意外或故意使用引號字符。每當使用用戶提供的數據時,都應該使用'?'佔位符。在太多的應用程序中,搜索「Joe's」Fish House「」是有問題的。 – Rob