Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在查询中多次更新同一列_Sql_Sql Update - Fatal编程技术网

Sql 在查询中多次更新同一列

Sql 在查询中多次更新同一列,sql,sql-update,Sql,Sql Update,在同一个更新查询中,是否有指定的行为将同一列更新2次以上,如下所示 UPDATE tbl SET a = 5, b = 'something', a = 6 WHERE c = 'whatever'; 这是否有一个标准化的行为,或者在不同的SQL风格之间可能会有所不同(例如,它是“未定义的行为”)?使用sqlite的粗略测试似乎表明它们是从左到右执行的,因此最后一列值将是结果列值,但这并不意味着总是这样 编辑:我尝试这样做的原因是我正在为一个类项目测试一些SQL注入。更新中的一个字段被不安全地

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

UPDATE tbl SET a = 5, b = 'something', a = 6 WHERE c = 'whatever';
这是否有一个标准化的行为,或者在不同的SQL风格之间可能会有所不同(例如,它是“未定义的行为”)?使用sqlite的粗略测试似乎表明它们是从左到右执行的,因此最后一列值将是结果列值,但这并不意味着总是这样


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

这并不是您想要的答案,但是假设文本“something”是您要传入的字段,并且它没有参数化或转义,您可能可以执行此操作。这一切都取决于查询是如何构建的,以及查询所针对的数据库

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'";

这里有一个相关的问题:

你为什么要这样做?也许样本数据和期望的结果可以帮助我们理解您的目标。在
mysql
中,它将使用您提供的最后一个值进行更新--
sql server
甚至不允许它。你想做什么?@sgedes我已经更新了帖子。通常没有指定
set
语句的分配顺序。给定的数据库可能会指定词法顺序,但不能保证这一点。