首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >{fmt}将编译时格式字符串与SQL一起使用

{fmt}将编译时格式字符串与SQL一起使用
EN

Stack Overflow用户
提问于 2021-10-13 16:36:48
回答 1查看 102关注 0票数 1

我想做的是用fmtlib做一个SQL查询构建器,它的理想语法是:

代码语言:javascript
运行
复制
void run_query(fmt::string_view format, fmt::format_args args) {
  ...
}

template <typename S, typename... Args>
void query(const S& format, Args&&... args) {
  run_query(format, fmt::make_args_checked<Args...>(format, args...));
}

std::string query = query("SELECT * FROM user WHERE id = '{}'", 123);

显然,这将允许SQL注入,因此我希望将每个参数传递给一个SQL转义函数。我找到了一个看起来可以工作的previous question,但是库已经改变了,这个例子不再有效。我还查看了一些旧的文档,其中有一个叫做ArgVisitor的东西,我也认为它可能会起作用,但它也被删除了。

我理解在SQL查询构建中使用格式化字符串的想法是有争议的,但我希望保留类型安全性、易用性和编译时的格式化字符串检查。

EN

Stack Overflow用户

发布于 2021-10-14 17:15:21

{fmt} 8.x中,您应该将格式字符串作为fmt::format_string传递,这将在支持C++20 consteval的编译器上启用编译时检查

代码语言:javascript
运行
复制
#include <fmt/core.h>

void run_query(fmt::string_view format, fmt::format_args args) {
  // ...
}

template <typename... T>
void query(fmt::format_string<T...> fmt, T&&... args) {
  run_query(fmt, fmt::make_format_args(args...));
}

int main() {
  query("SELECT * FROM user WHERE id = '{}'", 123);
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69559185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档