Как вставить любую строку в sqlite3 в c - PullRequest
4 голосов
/ 31 мая 2010

Мне нужно вставить строку в базу данных sqlite моя команда ..

Err=sqlite_exec(DB, "create table tbl5(TEXT varchar(100));", xCallback, (void*)"First Test", &ErrMsg);

Err=sqlite_exec(DB, "insert into tbl5 values  ('some string');", xCallback, (void*)"First Test", &ErrMsg); 

отлично работает, но когда я хочу поставить s="some string" т.е.

Err=sqlite_exec(DB, "insert into tbl5 values  (s);", xCallback, (void*)"First Test", &ErrMsg); 

тогда это не работает так, как добавить переменную, то это не работает так, как вставить переменную в базу данных sqlite спасибо тебе

Ответы [ 3 ]

6 голосов
/ 31 мая 2010

Не используйте sprintf(), но sqlite3_mprintf(). Здесь - документация.

char s[20] = "some string";
char* query = sqlite3_mprintf("insert into tbl5 values ('%q');", s);

В противном случае у вас есть риск SQL-инъекция .

Результирующая строка запроса должна быть освобождена с помощью sqlite3_free().

Также обратите внимание на '%q' вместо обычного '%s'.

2 голосов
/ 31 мая 2010

Помимо уже приведенных предложений, вы также можете использовать подготовленные операторы со связанными параметрами (это также полезно, если вы собираетесь повторить оператор несколько раз с различными параметрами).см. sqlite3_prepare_v2 и sqlite3_bind_* для получения дополнительной информации

sqlite3_stmt *stmt;

// Create a prepared statement.
Err = sqlite3_prepare_v2(DB, "insert into tbl5 values (?)", -1, &stmt, NULL);
if (Err != SQLITE_OK)
{
    //...
}

// Bind our string to the statement.
Err = sqlite3_bind_text(stmt, 1, "some string", -1, SQLITE_TRANSIENT);
if (Err != SQLITE_OK)
{
    //...
}

// Execute the statement.
Err = sqlite3_step(stmt);
if (Err != SQLITE_DONE)
{
    //...
}

// Free the prepared statement.
Err = sqlite3_finalize(stmt);
0 голосов
/ 31 мая 2010

Вы можете использовать sprintf для создания отформатированной строки.

char s[20] = "some string";
char query[100];
sprintf(query, "insert into tbl5 values (%s);", s);

Вам нужно убедиться, что query достаточно большой.

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