1. 方法1
sqlite3_mprintf
替换sprintf
,'%q'
替换'%s'
.
1.1. 举例
修改前代码
//修改前, 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;
修改后代码
//修改后,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
方式。
sql_query.prepare("INSERT INTO tables VALUES(?, ?);");
sql_query.addBindValue("hello'123");
sql_query.addBindValue("hello");
sql_query.exec();