Есть три способа решить эту проблему:
- Выполните форматирование самостоятельно. Не делайте этого. (Ну, нет, если только эта строка не является частью вашего кода, а не вводится пользователем. В этом случае этот подход подходит.)
- Используйте
sqlite3_mprintf("%Q")
длясделать SQLite сделать это.(%q
делает замену кавычек; %Q
делает замену кавычек и вставляет NULL для нулевого указателя.) - Используйте привязки в вашем утверждении, которое вы заполняете
sqlite3_bind_text
.Это лучший способ сделать это, так как он не требует перекомпиляции оператора для каждой строки и не открывает вам SQL-инъекцию .
Использование привязки будетвыглядеть следующим образом:
sqlite3_prepare(db, "INSERT INTO Table(Column) VALUES(?);", -1, &stmt, NULL);
sqlite3_bind_text(stmt, 1, [str cStringUsingEncoding:NSUTF8StringEncoding],
-1, SQLITE_TRANSIENT);
// stepping, etc
(Не забудьте выполнить проверку ошибок.)