Как вы нашли, просто используя один и тот же текст в качестве имени переменной и в качестве подстроки строки буквального не вызывает содержимое переменной быть сращены в строку. Компилятор теоретически может установить это для вас, но он не делает этого без явных символов форматирования, не является признаком какого-либо языка, о котором я когда-либо слышал. Даже если это было поддержано, вы все равно не смогли бы объединить объекты NSString в строки C.
Итак, вопрос заключается в том, как объединить строку из str
в строку запроса.
Ответ неstringWithFormat:
!
Это открывает вам SQL-инъекцию, которая в контексте базы данных, к которой пользователь обращается с той же машины, на которой он находится, означает, что пользователь может испортить свои данные, введя неправильную вещь. Попытка исправить это, ускользнув от вещей, - это бесконечная игра с ударом-молью и неуверенностью в себе («Я надеюсь, что это последняя из этих ошибок»).
Правильное решение - позволить SQLite сплайсировать параметры в запрос, поскольку только он знает, как это сделать. Вы делаете это, готовя инструкцию с вопросительным знаком в каждой точке, где вам нужно сращиться в значении, затем binding the value(s) into the statement. Каждый вызов одной из функций связывания заменяет один не привязанный заполнитель тем, что значение, которое вы передаете, безопасно, то есть не будет создавать недопустимый или деструктивный запрос.
1+ Питер хороший. –