1. 方法1
sqlite3_mprintf
替换sprintf
,'%q'
替换'%s'
.
1.1. 举例
修改前代码
c
//修改前, hello'123写入失败
char sql[1000]
char* sql = sprintf("UPDATE table SET name = '%s' WHERE name_id = %d",
"hello'123", 1);
rc = sqlite3_exec(db, sql, NULL, NULL, &err_msg);
if (rc != SQLITE_OK )
{
fprintf(stderr, "Failed to updata. \n");
fprintf(stderr, "SQL error: %s\n", err_msg);
sqlite3_free(err_msg);
sqlite3_close(db);
return -1;
}
/* 关闭 */
sqlite3_close(db);
return 0;
修改后代码
c
//修改后,hello'123写入成功
char* sql = sqlite3_mprintf("UPDATE table SET name = '%q' WHERE name_id = %d",
"hello'123", 1);
rc = sqlite3_exec(db, sql, NULL, NULL, &err_msg);
if (rc != SQLITE_OK )
{
fprintf(stderr, "Failed to updata. \n");
fprintf(stderr, "SQL error: %s\n", err_msg);
sqlite3_free(err_msg);
sqlite3_close(db);
sqlite3_free(sql); //别忘了释放
return -1;
}
/* 关闭 */
sqlite3_close(db);
sqlite3_free(sql); //别忘了释放
return 0;
2. 方法2
使用sqlite3_prepare_v2
或prepare
方式。
c
sql_query.prepare("INSERT INTO tables VALUES(?, ?);");
sql_query.addBindValue("hello'123");
sql_query.addBindValue("hello");
sql_query.exec();