вставить строковое значение с апострофом - PullRequest
6 голосов
/ 20 ноября 2010

Рассмотрим строку с апострофом, которую необходимо вставить в таблицу SQLite.

INSERT INTO myTable ( table_Title TEXT ) VALUES ( 'world's' )

Как вы можете разметить или избежать апостроф в значении в выражении INSERT?

Ответы [ 2 ]

16 голосов
/ 20 ноября 2010

http://www.sqlite.org/c3ref/bind_blob.html

Вы не должны передавать ввод непосредственно в запрос в виде строки, подобной этой.Это не только неприятно, но и уязвимо для атак с использованием SQL-инъекций, что, возможно, не является большой проблемой для приложений Mac, но все еще является плохой идеей, когда в вашем распоряжении есть подготовленные операторы.Подготовленные операторы гарантируют, что базовая база данных безопасно считывает фактические, неизмененные входные значения.

Для вашего конкретного примера (для краткости / ясности удалена проверка ошибок):

sqlite3 *db;
sqlite3_open("test.db", &db);

// Create a prepared statement
sqlite3_stmt *stmt;
const char *sql = "INSERT INTO myTable (table_Title TEXT) VALUES (?)";
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);

// Bind the parameter (safely)
sqlite3_bind_text(stmt, 1, "world's", -1, NULL);

// Execute the prepared statement
sqlite3_step(stmt);

(не проверено, но выполучить представление).

2 голосов
/ 29 сентября 2013

Вы можете использовать '' вместо одного апострофа.
Пример для вставки:
Insert into table_name values('haven''t');

Ссылка: https://www.sqlite.org/faq.html#q14

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