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();
相关推荐
王维志3 天前
LiteDB详解
数据库·后端·mongodb·sqlite·c#·json·database
相与还3 天前
godot+c#操作sqlite并加解密
sqlite·c#·godot·sqlcipher
向上的车轮3 天前
如何用 Rust 重写 SQLite 数据库(二):是否有市场空间?
数据库·rust·sqlite
大可门耳5 天前
Qt的数据库模块介绍,Qt访问SQLite详细示例
数据库·qt·sqlite
Jayyih6 天前
嵌入式系统学习Day35(sqlite3数据库)
数据库·学习·sqlite
朱自清的诗.6 天前
使用python脚本储存mosquito服务器数据到sqlite
python·单片机·sqlite·esp32
熊思宇6 天前
Sqlite“无法加载 DLL“e_sqlite3”: 找不到指定的模块”解决方法
数据库·sqlite
神仙别闹6 天前
基于 Vue+SQLite3开发吉他谱推荐网站
前端·vue.js·sqlite
安卓开发者6 天前
鸿蒙NEXT中SQLite数据库全面实战指南
数据库·sqlite·harmonyos
Mr_Xuhhh6 天前
项目-sqlite类的实现
java·jvm·sqlite