Mysql 在Groovy SQL中使用参数的正确方法

Mysql 在Groovy SQL中使用参数的正确方法,mysql,json,groovy,Mysql,Json,Groovy,我正在使用GroovySQL执行一个查询,该查询将一些JSON添加到PostgresJSONB数据库的数组中 当我运行下面的代码时,我得到一个关于SQL注入的警告,下面是我得到的警告 在GroovySQL中,请不要在动态表达式周围使用引号 它以$开头,这意味着我们不能使用JDBC 预先准备好的声明和安全漏洞。Groovy已经解决了这个问题 你搞错了,但安全漏洞仍然存在 此外,我无法将JSON保存在我的数据库中。如果我的JSON中有一个“字符”,我会得到以下错误: Sql无法处理“未终止”字符的查

我正在使用GroovySQL执行一个查询,该查询将一些JSON添加到PostgresJSONB数据库的数组中

当我运行下面的代码时,我得到一个关于SQL注入的警告,下面是我得到的警告

在GroovySQL中,请不要在动态表达式周围使用引号 它以$开头,这意味着我们不能使用JDBC 预先准备好的声明和安全漏洞。Groovy已经解决了这个问题 你搞错了,但安全漏洞仍然存在

此外,我无法将JSON保存在我的数据库中。如果我的JSON中有一个“字符”,我会得到以下错误:

Sql无法处理“未终止”字符的查询

我已将代码更改为此

@Override
Operation save(Player player) {
    String json = objectMapper.writeValueAsString(player)
    Blocking.get {
        sql.executeUpdate("""
            UPDATE site_content
            SET content = jsonb_set(content, '{playersContainer,players}'::text[], content->'playersContainer'->'players' || ':json'::jsonb)
            where id = :id
            """, json: json, id: player.teamId)
    }.operation()
}
但是我得到了错误

详细信息:应为JSON值,但找到:。职位:167


在Groovy SQL查询中放置动态参数的正确方法是什么?当我将JSON发送到查询时,我应该对它进行编码吗?在我从React应用程序发送之前,我会使用JSON.stringfyjson。这还不够吗?

绑定名称周围不应有引号

使用:json而不是:json

第一个是绑定,第二个是以冒号开头的字符串。因此,错误消息很简单:无法从字符串“:json”解析json对象

@Override
Operation save(Player player) {
    String json = objectMapper.writeValueAsString(player)
    Blocking.get {
        sql.executeUpdate("""
            UPDATE site_content
            SET content = jsonb_set(content, '{playersContainer,players}'::text[], content->'playersContainer'->'players' || ':json'::jsonb)
            where id = :id
            """, json: json, id: player.teamId)
    }.operation()
}