按类似条件更新不同的表和列

时间:2014-01-27 13:23:45

标签: php mysql pdo

我必须运行一个过程,该过程将使用多个表中的新值更新旧值。所有这些表都是不同的,并且具有不同的列名,并且它们甚至不能在它们中匹配$old_value(在这种情况下,列不应该更新),所以我只能想到的是运行事务,像这样:

$new_value = 'something';

$DBH->prepare("SELECT old_value FROM table_0 WHERE id = :id");
$DBH->execute(':id' => $some_value);
$result = $DBH->fetch(PDO::FETCH_ASSOC);

if( $new_value != $result[0]['old_value'] )
{
    $DBH->beginTransaction();

    $DBH->exec("UPDATE table_1 SET column_1 = $new_value WHERE column_1 = $old_value");
    $DBH->exec("UPDATE table_2 SET column_2 = $new_value WHERE column_2 = $old_value");
    $DBH->exec("UPDATE table_2 SET column_3 = $new_value WHERE column_3 = $old_value");

    $DBH->rollBack();
}

有没有更好的解决方案?也许在SELECT上运行UPDATE而不影响整个结果集?

2 个答案:

答案 0 :(得分:1)

您有三种不同的更新条件,因此您基本上需要三种不同的更新。如你所知,将它们包含在交易中是最可靠的方法。

答案 1 :(得分:0)

最后你需要做

$DBH->commit();

只有在出现错误时才会$DBH->rollback()。回滚撤消自交易开始以来您所做的一切。