How to insert any string in sqlite3 in c

2019-04-09 10:34发布

I have to insert a string into a sqlite data base my command ..

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); 

works fine but when I want to put s="some string" ie

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

then this is not working so how to add variable then It is not working so how to insert variable in sqlite database thank u

标签: c sqlite3
3条回答
一夜七次
2楼-- · 2019-04-09 11:11

Don't use sprintf() but sqlite3_mprintf(). Here is the documentation.

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

Otherwise you have a risk of SQL injection.

The resulting query string should be freed using sqlite3_free().

Also note the '%q' instead of the usual '%s'.

查看更多
【Aperson】
3楼-- · 2019-04-09 11:19

Other than the suggestions already given, you can also use prepared statements with bound parameters (this is also useful if you intend to repeat the statement several times with different parameters). see the sqlite3_prepare_v2 and sqlite3_bind_* for more information

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);
查看更多
Fickle 薄情
4楼-- · 2019-04-09 11:27

You could use sprintf to create a formatted string.

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

It's up to you to make sure query is big enough.

查看更多
登录 后发表回答