2010-06-19 47 views
2

我在几次迭代中构建了一个非常复杂的谓词,并且希望在谓词中立即提供匹配值。如何防止核心数据中的“SQL注入”?

相反的:

[NSPredicate predicateWithFormat:@"departmentName like[c] %@"]; 

我想做的事:

的NSString *海峡= [的NSString stringWithFormat:@ “DEPARTMENTNAME像[C] '%@'”,DEPARTMENTNAME]。 [NSPredicate predicateWithFormat:str];

由于这是一个愚蠢的替代,我猜有可能通过输入垃圾来无意中“破解”这个谓词。

我找不到任何会“神奇地引用”那些对我有价值的东西。

原因是,我需要在几次迭代中建立一个复杂的谓词,所以我必须构造一个大的谓词字符串。模板不适用于SUBQUERY。所以我需要在字符串中立即提供值,因为我不想做20个不同的谓词初始化,这取决于我对谓词格式有多少个值。

回答

8

直接使用NSComparisonPredicate,并绕过谓词格式问题。

NSPredicate *fetchPredicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"departmentName"] 
                   rightExpression:[NSExpression expressionForConstantValue:searchTerm] 
                     modifier:NSDirectPredicateModifier 
                      type:NSLikePredicateOperatorType 
                     options:0]; 

有通过Predicate Programming Guide读“创建谓词直接在代码中”,并为您NSComparisonPredicate

类参考