Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
#1

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

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

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

как было прекрасно если бы была функция схожая по синтаксису с NSString stringWithFormat: но при этом проводившая экранирование на-лету
http://www.cyberforum.ru/php-beginners/thread1694463.html

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

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

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

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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос SQL автоматическое экранирование (Objective-C):

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

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

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

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

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

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
Привет! Вот еще темы с решениями:

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

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

Ms sql server management studio 2012 автоматическое заполнение таблиц
Нужно создать таблицы которые состоят из элементов из другой таблицы. Есть...

Экранирование
Подскажите как можно разделять строки если в ней присутствуют квадратные скобки...


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

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

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