Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

imrosan/sql-format

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

23 Commits

Repository files navigation

sql-format

功能: SQL语句格式化库,避免SQL拼接,防止SQL注入

使用说明:

  1. 使用方法参见demo.cpp
  2. 使用"?"问号作为参数的占位符
  3. 支持格式化的数据类型有如下:
    1. 基本数字数据类型 bool, char, char16_t, char32_t, wchar_t, short, int, long, long long, float, double
    2. 条目1)对应的无符号版本的数据类型
    3. char*, const char*, string, char[]
  4. 字符串类型支持防御SQL注入, 不过需要在sql_format/sf_escape.h文件中定义的escape函数(里面有几个默认实现可以参考)
  5. 此库只包含头文件,正常使用包含头文件sql_format/sf_formatter.h 即可

常用使用方法:

MYSQL mysql;
long uid = 1024; // 用户id
std::string product = "book"; // 产品名称
const char* remark = "newest"; // 备注关键字
int startIndex = 10; // 分页开始
int pageSize = 10; // 分页大小

基本用法

std::string sql = SqlFormat::Format(mysql, "SELECT * FROM t_order WHERE uid=? AND remark=? LIMIT ?,?", uid, remark, startIndex, pageSize);
// SELECT * FROM t_order WHERE uid=1024 AND remark='newest' LIMIT 10,10

LIKE支持

std::string sql = SqlFormat::Format(mysql, "SELECT * FROM t_order WHERE remark LIKE ?", like_lr(remark));
// SELECT * FROM t_order WHERE remark LIKE '%newest%'

范围支持

std::list<std::string> productList = {"book", "iphone", "cup"};
std::string sql = SqlFormat::Format(mysql, "SELECT * FROM t_order WHERE product IN ?", in_range(productList));
// SELECT * FROM t_order WHERE product IN ('book','iphone','cup')

复杂逻辑

bool searchRemark = false; // 是否是搜索备注
bool paging = true; // 是否分页

std::string sql = "SELECT * FROM t_order WHERE uid=? ";
SqlFormat::Formatter formatter(uid);

if (searchRemark)
{
sql += "AND remark=? ";
formatter.append(remark);
}

if (paging)
{
sql += "LIMIT ?,? ";
formatter.append(startIndex, pageSize);
}

std::string sql = formatter.format(mysql, sql);
// SELECT * FROM t_order WHERE uid=1024 LIMIT 10,10

About

格式化SQL语句,避免SQL拼接,防止SQL注入

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /