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

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
#1

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

16.06.2013, 19:48. Просмотров 1264. Ответов 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)
как видим параметры строки экранировались автоматически
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2013, 19:48     SQL автоматическое экранирование
Посмотрите здесь:

Экранирование sql запроса PHP
C# ASP.NET MS SQL Server и автоматическое забивание текстового поля
Экранирование \\ C++ Builder
PHP Автоматическое выполнение sql запроса
Экранирование PHP БД
Экранирование * Bash
MS Access Запрос sql в VBA. Автоматическое заполнения поля
Отключить автоматическое экранирование в phpstorm
Автоматическое экранирование обратного слэша PHP
SQL Server Ms sql server management studio 2012 автоматическое заполнение таблиц
PHP БД Экранирование SQL запроса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
17.06.2013, 10:15     SQL автоматическое экранирование #2
noname_club, сударь, Вы в Капитана играете? Уже не первая тема подобная от Вас...
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
16.09.2013, 10:26     SQL автоматическое экранирование #3
sqlite3_bind_text
Yandex
Объявления
16.09.2013, 10:26     SQL автоматическое экранирование
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru