【发布时间】:2021-11-23 03:27:17
【问题描述】:
我需要执行更新语句,并且在发送 http 补丁请求之前我不确定要更新的列。我需要修改员工记录,并且需要构造一个仅包含已更新值的列的更新语句。
该表有列employeerecords(ID,name,dateOfBirth,startyear,endyear,company)。 以及以下示例响应:
{
"name":"Jim"
}
更新:发送补丁请求时,我通过 URI 参数提供 ID。我也在Mule 4中实现。我不知道如何完成以下。
更新员工记录 SET -未知- WHERE ID =:ID;
【问题讨论】:
-
一般来说,应用程序应该始终向后端提供所有的字段值——完整的记录——而不仅仅是更改的值。在您的示例中,数据甚至不包括记录的关键字段:您怎么会知道要更新的 哪个 记录,更不用说要设置什么值了...这不是好的设计。
-
@pmdba,我在上面提供了更多信息。我通过 URI 参数提供 PK。
-
这仍然不是一个好的设计。 API 应接受所有参数 - 完整记录 - 作为输入并发出单个预先确定的更新语句。或者,不同的 API 调用可以接受特定的字段子集作为输入,但 SQL 仍然应该是静态的,而不是动态的。为 DML 命令构建动态 SQL 是 SQL 注入或其他问题的秘诀。
-
我在这里同意@pmdba。从技术上讲,您可以在收到请求后测试每一列,然后从那里构建一个动态 sql,其中包含您要更新的列。