Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

SQL автоматическое экранирование - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Быстрое обращение к данным многомерных словарей http://www.cyberforum.ru/objective-c/thread902362.html
предлагаю на рассмотрение следующий метод работы с данными многомерных словарей рассматриваются словари, чья многомерная структура состоит из словарей и массивов 1) сокращенные методы получения...
Objective-C In-app purchases Всем добрый вечер. Я впервые сталкиваюсь с In-app purchases, у меня такой вопрос. Я так понял, что тестировать In-app purchases можно, только если создан тестовый пользователь. Клиент предоставил... http://www.cyberforum.ru/objective-c/thread899981.html
Objective-C Наложение изображений на фотографию
Привет всем! Есть какие-нибудь хорошие решения в сети, для вот такой задачи: наложение изображения на фотографию(ну например на фотографию маску бетмена наложить и сохранить в библиотеке, ну и все...
Objective-C необычная просьба, оформить открытку.Все по теме ветки)
вообщем идея такая, просьба посдказать как оформить это в objective - c, туго с программингом, просто друг пишет на objective-c, помогите пожалуйста, буду очень благодарен, текст зафигачу в...
Objective-C Письмо со ссылкой http://www.cyberforum.ru/objective-c/thread898745.html
Добрый вечер! Отправляю письмо через метод openURL. Как добавить в текст письма кликабельную ссылку?
Objective-C Программирование под iOS Здравстувуйте, нужна книга: "Программирование под iOS. Для профессионалов" Дж. Конвэй, А. Хиллегасс Питер 2013. ISBN: 978-5-4461-0102-3, в эл. виде, любом. Всё что смог найти, это пару битых ссылок... подробнее

Показать сообщение отдельно
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583

SQL автоматическое экранирование - Objective-C

16.06.2013, 19:48. Просмотров 1297. Ответов 2
Метки (Все метки)

Всем думаю известно что текстовые параметры в SQL запросах требуют экранирования кавычек
и действие это, в Objective C может вызвать затруднение и расползание кода на десятки строк

как было прекрасно если бы была функция схожая по синтаксису с NSString stringWithFormat: но при этом проводившая экранирование на-лету

давайте напишем нечто подобное

итак первое на что нужно обратить внимание что количество параметров у функции будет неизвестно

используем для этого "оператор-параметр" ... (троеточие) означающий как раз неопреденность

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-(NSString*) escapeString: (id) string {
    if ([string isKindOfClass:[NSString class]]) {
        NSString*ret = [string stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
        ret = [ret stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];
        return ret;
    } else {
        return [NSString stringWithFormat:@"%@",string];
    }
}
 
-(NSString*) SQLWithFormat: (NSString*) formatString, ...  {
    va_list args;
    va_start(args, formatString);
    NSArray *z = [formatString componentsSeparatedByString:@"%@"];
    NSString* text = @"";
    id targ = nil;
    for (int i=0; i<z.count-1; i++) {
        targ = va_arg(args, id);
        text = [text stringByAppendingString:[z objectAtIndex:i]];
        text = [text stringByAppendingString:[self escapeString:targ]];
    }
    text = [text stringByAppendingString:[z lastObject]];
    va_end(args);
    return text;
}
ВАЖНО! чтобы программист был внимательным и не допускал ошибок с неверным числом аргументов, нужно в h файле описания функций прописать макрос NS_FORMAT_FUNCTION(1,2)

точно такой же макрос можно встреть в Foundation/NSString.h

h файл
Objective-C
1
2
-(NSString*) escapeString: (id) string;
-(NSString*) SQLWithFormat: (NSString*) formatString, ... NS_FORMAT_FUNCTION(1,2);
тестирование:

Objective-C
1
2
NSString*z = [self SQLWithFormat:@"insert into mytable values ('%@','%@','%@',%@,%@)",@"hel\\lo",@"worl'''d",@"b'ig",@200,@100400];
NSLog(@"%@",z);
insert into mytable values ('hel\\lo','worl\'\'\'d','b\'ig',200,100400)
как видим параметры строки экранировались автоматически
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru