Closed AmdRyZen closed 3 months ago
可以使用SqlBinder接口
然后构造 SqlAwaiter 使用协程
这种方式 还是不适合 动态sql 正常的逻辑是 比如select 用户提交的body 里面 判断那些参数是否为空 不为空 会拼接一个动态sql 然后 绑定参数 SELECT * FROM xxl_job_info WHERE 1=1 and a=? and b=? 具体有多少个 xxx=? 是不确定的 execSqlCoro 的第一个参数是sql 字符串 后面是动态参数 这种方式只能固定个数
void YourController::handleHttpRequest(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) {
auto client = drogon::app().getDbClient();
std::vector
// 添加参数
int id = 1;
std::string name = "Alice";
// 这里是写死 正常情况是用户是否传id name age 等等 params.push_back(id); params.push_back(name);
auto result = co_await clientPtr->execSqlCoro(dynamicSql + " order by id asc limit 10 ", params);
if (result.error()) {
// Handle error
callback(HttpResponse::newHttpError(HttpStatus::k500InternalServerErr));
return;
}
// Handle success
callback(HttpResponse::newHttpOK());
}
GPT给了一个这种的操作是没办法编译的 不过他的逻辑是我想要的 我的动态sql里面拼接了 几个? params.push_back() 多少个参数 一一对应
用SqlBinder,我给了示例代码
auto result = co_await clientPtr->execSqlCoro(dynamicSql + " order by id asc limit 10 ", "xxx");
我希望 在 执行 execSqlCoro 方法的时候, Arguments &&...args 参数 是一个 std::vector
不然动态sql 没办法绑定参数 因为where 条件 可能会根据用户参数 拼接的
我尝试写了一个拼接动态sql的方法
Result buildDynamicQuery(const std::string &baseSql, const std::vector &conditions)
{
}