0

変更をコミットする直前に、トランザクションでどの値が変更されたかを知る必要があります。元の値を取得することは可能ですか (コミットされていない値ではありませんか?)。例(架空のコード):

try {
    $pdo->beginTransaction();
    $pdo->exec('UPDATE items SET name = :name, text = :text WHERE id = :id', $newData);

    //If the update was fine:
    $oldData = $pdo->query('SELECT * FROM items WHERE id = :id LIMIT 1', array(':id' => $newData['id']);

    $diff = array_diff_assoc($newData, $oldData);

    echo 'Item was update successfully with new values in '.implode(', ', array_keys($diff));

    $pdo->commit();

} catch (Exception $E) {
    echo 'something is wrown';

    $pdo->rollBack();
}

トランザクション内の選択データでは、このデータは元のデータではなく、変更されたデータです。これをスキップするmysqlのオプションはありますか?

4

1 に答える 1

2

トランザクション内では、q クエリを送信した時点で変更が行われたかのようにすべてが機能します。それを回避する唯一の方法は次のとおりです。

  • 取引開始、
  • 必要な値を選択し、
  • それらをPHP変数に保存し、
  • あなたの仕事を実行し、
  • 再度選択し、
  • 比較、
  • コミットするかどうか。

また、更新が成功したかどうかのみをテストする必要がある場合は、単にエラーをキャッチするだけで十分です。

于 2013-07-03T13:42:37.587 に答える