Intereting Posts
Изменение переменной из глобальной в локальную – C Скобки нужны для того, чтобы получить адрес элемента struct от указателя на структуру, как в «& (s-> var)« vs »& s-> var»? Программа не сбой при переполнении кучи cat / Xargs / команда VS для / bash / command Почему в этой программе нет ошибок? Как установить условную точку останова в gdb, когда char * x указывает на строку, значение которой равно «привет»? вызов rand (), возвращающий неслучайные результаты Как выполнить поиск определенного узла в структуре графика в C? Могу ли я использовать указатель для вывода массивов массива int так же, как массивы строк? Могут ли все функции в streamе иметь доступ к динамически распределенной памяти (куче) даже без указания указателя или локально для функции? Что означает n в `sscanf (s,”% d% n “, & i, & n)`? endian.h не найден на mac osx Проблемы с получением Process Time в C (Пожалуйста, помогите мне) Зачем использовать _mm_malloc? (в отличие от _aligned_malloc, alligned_alloc или posix_memalign) Когда мне нужно использовать volatile в ISR?

Objective-C sqlite добавляет параметр запроса внутри предложения LIKE

Я использую sqlite в Objective-C через API C. Одна из возможностей моего приложения заключается в том, что пользователь может искать имя человека и каждый новый символ, который они вводят, выполняется SQL-запрос с использованием LIKE чтобы найти всех людей, чьи имена соответствуют друг другу. Проблема, с которой я сталкиваюсь, параметризует совпадение внутри LIKE, без знака вопроса, который интерпретируется буквально. То есть, я считаю, что приложение в настоящее время ищет имена людей, которые include ? в них (это никто).

Мой код выглядит так:

 const char *sql = "SELECT rowid, name, email FROM person WHERE name LIKE '%?%'"; sqlite3_stmt *sqlStatement; if(sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) { NSLog(@"Problem preparing getFilteredPeopleStubs statement."); } if(sqlite3_bind_text(sqlStatement, 1, [searchText UTF8String], -1, SQLITE_TRANSIENT) != SQLITE_OK){ NSLog(@"Problem binding search text param."); } 

В основном, searchText – это то место, откуда я хочу получить название, но на данный момент я считаю, что он просто ищет людей, чье имя содержит ? , из-за одиночных котировок в '%?%' . Есть ли решение этой проблемы, которая все еще позволяет мне использовать параметризованный запрос (защита от SQL-инъекции) и достигает того, что мне нужно?

Поместите % символов в searchText , например (извините за каламбур):

 const char *sql = "SELECT rowid, name, email FROM person WHERE name LIKE ?"; sqlite3_stmt *sqlStatement; if(sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) { NSLog(@"Problem preparing getFilteredPeopleStubs statement."); } NSString *bindParam = [NSString stringWithFormat:@"%%%@%%", searchText]; if(sqlite3_bind_text(sqlStatement, 1, [bindParam UTF8String], -1, SQLITE_TRANSIENT) != SQLITE_OK){ NSLog(@"Problem binding search text param."); }