iPhone - Использование SQLite3: я пытаюсь поместить в таблицу SQL текст, который вводит пользователь (могут быть любые символы). Как это сделать безопасно? - PullRequest
0 голосов
/ 26 июля 2011

Я знаю, как поместить текст в таблицу sqlite3 в задаче c.Вот как я это делаю:

NSString *sql = [NSString stringWithFormat: @"INSERT OR REPLACE INTO myTable (name, response) VALUES ('%@','%@');", name, response];

char *err;
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK)
{
    sqlite3_close(db);
}

Моя большая проблема в том, что, поскольку текст, который я помещаю в таблицу, исходит непосредственно от пользователя, он может содержать любые символы, включая такие, как апострофы, который должен быть экранирован перед помещением в таблицу.

У меня есть два основных вопроса:

  1. Помимо апострофов, какие еще символы мне нужно экранировать для текста SQL, которыйпользователь может ввести?
  2. Каков наилучший способ изменить строку NSString для экранирования перед символами, которые необходимо экранировать, перед тем, как поместить его в таблицу sql?Стоит ли просто использовать сканер и анализировать строковый символ за символом в поисках символов, которые следует экранировать?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Вы должны использовать встроенную функцию ?. Вам нужно будет создать подготовленное заявление, а затем использовать sqlite_3_bind_text.

"INSERT OR REPLACE INTO myTable (name, response) VALUES (?,?);"

Я бы также порекомендовал посмотреть FMDB .

0 голосов
/ 26 июля 2011

Рассматривали ли вы использование основных данных? Он должен позаботиться об этом автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...