我必须运行一个过程,该过程将使用多个表中的新值更新旧值。所有这些表都是不同的,并且具有不同的列名,并且它们甚至不能在它们中匹配$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而不影响整个结果集?
答案 0 :(得分:1)
您有三种不同的更新条件,因此您基本上需要三种不同的更新。如你所知,将它们包含在交易中是最可靠的方法。
答案 1 :(得分:0)
最后你需要做
$DBH->commit();
只有在出现错误时才会$DBH->rollback()
。回滚撤消自交易开始以来您所做的一切。