3

そのコードのための私にとってより良い解決策はありますか?

<?php

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $password);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->beginTransaction();

    $dbh->exec("LOCK TABLES test2 WRITE");

    $row = $dbh->query('SELECT * from test2 WHERE c > 0 LIMIT 1');

    $stmt = $dbh->prepare("UPDATE test2 SET c=c-1 WHERE a=:a and c>0");
    $stmt->bindParam(':a', $row['a']);
    $stmt->execute();

    /**
    ...
    ....
    .....
    **/

    $dbh->exec("UNLOCK TABLES");

    $dbh->commit();
    $dbh = null;
} catch (PDOException $e) {
    error_log("Error!: " . $e->getMessage() . "\n", 3, "./my-errors.log");
    exit();
}

そのスクリプトへの接続を同時に取得する場合、すべての接続には、テーブルtest2(フィールドA)からの独自の行が必要です。

あなたのアイデアをありがとう:-)

4

2 に答える 2

1

aパラメータを知る必要がない場合は、次のクエリを使用できます

UPDATE test2 SET c=c-1 WHERE c>0 LIMIT 1;
于 2012-08-16T16:44:52.870 に答える