0

PDO を使用してテーブルを更新する方法を見つけようとしています - 同時に 2 つのレコードを更新する必要がありますが、これがどのように機能するかはわかりません。

セッションユーザーと「友達になったユーザー」がいます。

私の友達になったユーザーは、私のテーブルに 10 クレジットほどあり、他のユーザーが彼と友達になったときに X クレジットを提供できます。

// $uid is my logged in session user
// $follow_id is the id of the person were trying to befriend

// このプロセス全体に混乱していますか? 2 つのクエリを記述しますか? 1 は、befirended ユーザーからのクレジットを差し引いてから、クレジットを現在のセッション ユーザーの列に追加しますか?

$upd_stmt = $conn->prepare('SELECT * FROM users WHERE user_id=? ');
$upd_stmt->bindParam(1, $uid, PDO::PARAM_INT);
$upd_stmt->execute();

while( $row = $upd_stmt->fetch(PDO::FETCH_ASSOC) ) {

    $row['credits_offered'];
} 
4

2 に答える 2

1

これは、トランザクションが行われたものです。両方が正常に実行されるようにするために、1 つのクエリでこれを行う必要はありません。

$dbh->beginTransaction();

$addQuery = "UPDATE ...";
$subtractQuery = "UPDATE ...";

$sth = $dbh->exec($addQuery);
$sth = $dbh->exec($subtractQuery);

$dbh->commit(); // or $dbh->rollback();

トランザクションについて詳しくは、http: //en.wikipedia.org/wiki/Database_transactionをご覧ください。

短いバージョン- すべてのクエリが正常に実行されるか、まったく実行されないことを保証します。

于 2013-05-30T13:12:40.357 に答える
1

簡単に言えば、そうです。1 つは減算用、もう 1 つは加算用の 2 つのクエリを作成する必要があります。

おそらく 1 つのクエリで行うこともできますが、読みやすくするために 2 つのクエリで行うことをお勧めします。また、トランザクションを介して実行することをお勧めします。最初のクエリが正常に実行されても 2 番目のクエリが実行されない場合は、ロールバックする必要があります。

PHP + MySQL トランザクションの例

于 2013-05-30T13:05:06.263 に答える