sql php从更新的行中查找字段值

时间:2012-01-13 22:33:48

标签: php sql

说我有这个循环:

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字段中的值。

最有效的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以让查询包含多个语句,最后一个语句用于“结果”。

因此,您只需在更新查询的末尾添加“select”语句,并将其视为普通的select语句:

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

此方法的优点是它不需要额外的数据库调用。

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

答案 1 :(得分:0)

<强>更新

这是我认为需要修改的第一个第二个SO答案。在四处寻找,我找到了一个更好的答案。

问题的accepted answerSQL: Update a row and returning a column value with 1 query

  

您需要OUTPUT子句

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

类似的问题:Is there a way to SELECT and UPDATE rows at the same time?

旧答案

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

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

这可以防止您确保更新发生,因为mysql_query仅返回最后一个语句的结果。

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

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

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;
}