Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios构建字符串时,我需要重复使用相同的占位符_Ios_Objective C - Fatal编程技术网

ios构建字符串时,我需要重复使用相同的占位符

ios构建字符串时,我需要重复使用相同的占位符,ios,objective-c,Ios,Objective C,我正在生成一个正在SQL语句中使用的字符串。我需要多次重复使用同一个字符串。此字符串是文本框中的文本 当前代码: NSString *searchStr = [NSString stringWithFormat:@"(Name LIKE \'%%%@%%\' OR Contact LIKE \'%%%@%%\')", [self.txtfSearch text], [self.txtfSearch text]]; 所有%都用于包含搜索。请不要对这个方法发表评论,因为我正在连接一个我目前无法控制

我正在生成一个正在SQL语句中使用的字符串。我需要多次重复使用同一个字符串。此字符串是文本框中的文本

当前代码:

NSString *searchStr = [NSString stringWithFormat:@"(Name LIKE \'%%%@%%\' OR Contact LIKE \'%%%@%%\')", [self.txtfSearch text], [self.txtfSearch text]];
所有%都用于包含搜索。请不要对这个方法发表评论,因为我正在连接一个我目前无法控制的Web服务。我相信你们都能理解

我需要做的是在最后重用[self.txtfSearch text]部分。我已经在字符串和占位符上查找了apple开发文档。我甚至尝试了使用{0}作为占位符的C#方法,但我无法让它工作

如果我看两列的话,按照上面的方式做并不是什么大不了的事,但是在很多情况下,它会是6列或更多,然后字符串的构建就会变得荒谬可笑

我想要这样的东西:

NSString *searchStr = [NSString stringWithFormat:@"(Name LIKE \'%%{0}%%\' OR Contact LIKE \'%%{0}%%\')", [self.txtfSearch text]];
NSString *placeholderStr = @"_";
NSString *searchStr = [@"(Name LIKE '%%_%%' OR Contact LIKE '%%_%%'" stringByReplacingOccurrencesOfString: placeholderStr withString: [self.txtfSearch text]];

在obj-c中有这样做的方法吗?

您能这样做吗:

NSString *searchStr = [NSString stringWithFormat:@"(Name LIKE \'%%{0}%%\' OR Contact LIKE \'%%{0}%%\')", [self.txtfSearch text]];
NSString *placeholderStr = @"_";
NSString *searchStr = [@"(Name LIKE '%%_%%' OR Contact LIKE '%%_%%'" stringByReplacingOccurrencesOfString: placeholderStr withString: [self.txtfSearch text]];

这将用
txtfSearch

中的任何文本替换所有下划线(u),您真的不应该像这样构建SQL字符串。你正在引入一个攻击向量。@布里安尼克尔,我理解,但是我现在已经无能为力了,因为服务已经被建立了。我在OP中提到了这一点。至少在确定SQL数据库级别的安全性是它自己的事情之前,要努力正确地转义用户的输入。我要提到的问题是,如果用户键入
@BrianNickel我正在转义,会发生什么情况。这也是为什么我不要求对这一部分发表评论的原因。我不需要显示代码,因为它不适用于该问题。可能需要使用比下划线稍不常见的内容,例如“THING_to_REPLACE”“@Zev如果模板字符串本身可以由用户修改,那么最好使用用户不一定会猜到的字符组合。但是,如果模板字符串只是在应用程序内部使用,用户不会修改,那么下划线应该一点也不成问题。说得好。一个随机散列,perhaps即使在运行时生成,也可能是一个很好的占位符。