sqlphp从更新的行中查找字段值


sql php find field value from updated row

假设我有这个循环:

foreach ($array as $a) {
    if ($a == $b) { 
        mysql_query("UPDATE table SET this = 'that' WHERE id='$a'");
        }
    }

还有一张桌子。。。

id    this    blah
------------------------
1     that    54
2     that    73
3     there   27

在该循环中,我还想从正在更新的当前记录中查找存储在表blah字段中的值。

做这件事最有效的方法是什么?

您可以让查询由多个语句组成,最后一个语句用于"结果"。

因此,您可以在更新查询的末尾添加一个"select"语句,并将其视为普通的select语句:

UPDATE table SET this = 'that' WHERE id='$a'; SELECT blah from [your table] WHERE id = '$a'

这种方法的优点是不需要额外的DB调用。

当然,您会希望转义放入SQL语句中的值,以防止SQL注入,但这是另一回事。

更新

这是我的第一个的第二个SO答案,我觉得需要修改。环顾四周,我找到了一个更好的答案来回答你的问题。

根据已接受的问题答案:SQL:用1查询更新行并返回列值

您想要OUTPUT子句

UPDATE Items SET Clicks = Clicks + 1 
OUTPUT INSERTED.Name 
WHERE Id = @Id

类似的问题:有没有办法同时选择和更新行?

旧答案

SELECT语句添加到UPDATE查询的末尾。

mysql_query("UPDATE table SET this='this'WHERE id='$a';SELECT blah WHERE id='$sa';");

由于mysql_query只返回最后一条语句的结果,因此无法确保进行了更新。

您也可以编写一个自定义函数来执行这两个语句,但例如,如果UPDATE失败,则不会预生成SELECT,等等。

**骨架功能-未测试**

function MyUpdate($query, $id){ 
    $retVal = "-1" // some default value
    $uResult = mysql_query("UPDATE table SET this = 'that' WHERE id='$a'");
    if( $uResult )
    $result= mysql_query('SELECT blah WHERE id=$a');
        if (!$result) {
            die('Invalid query: ' . mysql_error());
        }
        $retVal = $result;
    }
    return $retVal;
}