С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
noname_club
107 / 98 / 12
Регистрация: 01.05.2013
Сообщений: 603
1

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

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

Автоматическое экранирование обратного слэша
Доброе времени суток! Есть ссылка $link = &quot;\\192.168.0.1\cat\dir&quot;; Если...

Отключить автоматическое экранирование в phpstorm
Как в phpstorm отключить экранирование при вставке текста? вместо...

Экранирование sql запроса
Всем привет. Возникла проблема с экранированием sql запроса внутри mysql_query...

Экранирование SQL запроса
Извините, за возможно, дурацкий и очевидный вопрос но гугл меня не удовлетворил...

Автоматическое выполнение sql запроса
смысл в том что например человек нажимает на кнопку в 14,22 сегодня(время...

2
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
17.06.2013, 10:15 2
noname_club, сударь, Вы в Капитана играете? Уже не первая тема подобная от Вас...
0
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
16.09.2013, 10:26 3
sqlite3_bind_text
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 10:26

Автоматическое выполнение обмена по расписанию на SQL-сервере
Добрый день. Конфигурация Управление Торговлей 10.3.41.1 Платформа 1С...

MS SQL Server и автоматическое забивание текстового поля
Я создаю поле типа char и хочу чтобы по умолчанию у меня его забивало каким...

Запрос sql в VBA. Автоматическое заполнения поля
Доброго времени суток, проблема такова не могу написать адекватный запрос на...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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