在查询中多次更新同一列

时间:2016-03-03 02:47:26

标签: sql sql-update

是否存在在同一UPDATE查询中更新同一列2次以上的指定行为,如下所示?

UPDATE tbl SET a = 5, b = 'something', a = 6 WHERE c = 'whatever';

是否存在标准化的行为,或者它可能在SQL的各种风格之间有所不同(例如,它是"未定义的行为")?使用sqlite进行粗略测试似乎表明它们是从左到右执行的,因此最后一列值将是结果值,但这并不意味着总是如此。

编辑:我尝试这样做的原因是我正在为一个类项目测试一些SQL注入。 UPDATE中的一个字段是不安全注入的,我试图用它来覆盖同一查询中以前的SET字段。

1 个答案:

答案 0 :(得分:0)

这并不是您正在寻找的答案,而是假设文字"某些内容"是您传入的字段,它没有参数化或转义,您可以这样做。这一切都取决于查询的构建方式以及运行的数据库。

UPDATE tbl SET a = 5, b = 'something'; UPDATE tbl set a = 6;--' WHERE c = 'whatever';

在用户输入中输入以下内容

something'; UPDATE tbl set a = 6;--

这假设查询是动态构建的,就像这样

var query = "UPDATE tbl set a = 5, b = '" + userInput + "' WHERE c = 'whatever'";

以下是相关问题:How does the SQL injection from the "Bobby Tables" XKCD comic work?