【发布时间】:2022-01-08 07:16:57
【问题描述】:
我有一个表,其中包含一些由迁移创建的 jsonb 列,如下所示:
public func prepare(on database: Database) -> EventLoopFuture<Void> {
return database.schema(MyTable.schema)
.id()
.field(.metadata, .custom("JSONB"), .required)
.create()
}
我正在尝试过滤 jsonb 字段上的查询。以下是一个有效的简单字符串插值。
//jsonFilters is a dictionary of key value pair for which we want to filter in jsonb field
var query = MyTable.query(on: db)
var filterString = ""
var cycleCount = 0;
jsonFilters.forEach({
(key, value) in
filterString +=
"metadata->>'\(key)' = '\(value)' "
cycleCount+=1
if(cycleCount < filter.metadata!.count) {
filterString += " AND "
}
})
query = query.filter(.custom(metadataString))
// Also filter on something else.
query = query.filter(....)
但是,这并不安全,并且存在 sql 注入漏洞。有没有办法绑定过滤器参数,例如使用 SQLQueryString?它应该与常规过滤器的其余部分一起使用。 (代码最后一行)
【问题讨论】: