Как вставить '?' (Вопросительный знак) в базе данных SQLite из iPhone SDK - PullRequest
1 голос
/ 30 марта 2011

Мне нужно вставить строку NSString, которая содержит '?' (знак вопроса), в базе данных sqlite. Когда я пытаюсь выполнить [database executeNonQuery:query], приложение вылетает:

Вот код:

NSString *question = [NSString stringWithFormat:@"How are you?"];
NSString *query = [NSString stringWithFormat:@"insert into sometable (questions) values ('%@') ",question];

[database executeNonQuery:query];

Если я передаю другие значения, которые работают нормально, но только строку, содержащую '?' не вставлено.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 30 марта 2011

?является заполнителем для заменяемых значений.Вы не должны вставлять элементы в базу данных, используя stringWithFormat, а используя заполнители.Я не знаю, какую библиотеку базы данных вы используете, но большинство библиотек позволяют вам использовать подготовленные запросы, например так:

[database executeQuery:@"insert into sometable (questions) values (?)", question];

question будет автоматически экранирован, а ваши вопросительные знаки будут сохранены.Это также охраняет персонажей против.Попробуйте сами, измените вопрос так: «Разве ты не рад, что я не сказал банан?».Ваш запрос, вероятно, завершится сбоем, поскольку сгенерированный SQL будет недействительным.

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