Sqlite插入单引号和双引号,防止sql注入

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_v2prepare方式。

c 复制代码
sql_query.prepare("INSERT INTO tables VALUES(?, ?);");
sql_query.addBindValue("hello'123");
sql_query.addBindValue("hello");
sql_query.exec();
相关推荐
jianghua00110 小时前
Django视图与URLs路由详解
数据库·django·sqlite
大尚来也10 小时前
双库协同,各取所长:.NET Core 中 PostgreSQL 与 SQLite 的优雅融合实战
postgresql·sqlite·.netcore
繁华落尽,寻一世真情11 小时前
【基于 AI 的智能小说创作助手】MuMuAINovel-sqlite 基于 AI 的智能小说创作助手
数据库·人工智能·sqlite
ggabb1 天前
中国文化速记清单.地名与母亲河.文化名人与经典
sqlite
l1t1 天前
DeepSeek总结的SNKV — 无查询处理器的 SQLite 键值存储
数据库·sqlite·kvstore
薛定谔的猫喵喵1 天前
基于C++ Qt的唐代诗歌查询系统设计与实现
c++·qt·sqlite
ggabb2 天前
中文的全息之美:字音藏道,字里见宇宙
sqlite
WHD3062 天前
苏州数据库(SQL Oracle)文件损坏修复
hadoop·sql·sqlite·flume·memcached
玄同7652 天前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
ggabb2 天前
中文的精确与意境,从来都不是英文能比肩的
sqlite