Форум программистов, компьютерный форум 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. Просмотров 1279. Ответов 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 автоматическое экранирование
Посмотрите здесь:

Отключить автоматическое экранирование в phpstorm - Разработка ПО
Как в phpstorm отключить экранирование при вставке текста? вместо ',exurl('',''),'&lt;br&gt; вставляет \',exurl(\'\',\'\'),\'&lt;br&gt; ...

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

Экранирование sql запроса - PHP
Всем привет. Возникла проблема с экранированием sql запроса внутри mysql_query Сам по себе запрос к mysql следующий (внутри mysql...

Экранирование SQL запроса - PHP БД
Извините, за возможно, дурацкий и очевидный вопрос но гугл меня не удовлетворил результатом, поэтому спрошу здесь: У меня есть множество...

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

MS SQL Server и автоматическое забивание текстового поля - C# ASP.NET
Я создаю поле типа char и хочу чтобы по умолчанию у меня его забивало каким нибудь текстом ('текст') , а он мне говорит нельзя так. как...

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

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

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

Экранирование \\ - C++ Builder
Привет, есть код на кнопке открытие диалога. После открытия, путь записывается в таком виде &quot;С:\123\123\233.exe&quot; а мне нужно вот в таком...

Экранирование - Perl
Подскажите как можно разделять строки если в ней присутствуют квадратные скобки my ($pid, $name) = split(/&quot;&gt;&lt;!

Экранирование - PHP БД
Всем привет:) Есть поле для добавление сообщения в бд!Я пробовал как работает филтрация и заметил что когда там пишешь например &lt;script...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ответ Создать тему
Опции темы

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