次のコードを使用して、「ルックアップ」テーブルを更新した後 (「nDeger」行を増やします)、テーブル「Isler」を更新する簡単なスクリプトがあります。
$PDOvt = new PDO ('mysql:dbname=' . VTAD . ';host=localhost', VTKA, VTP);
$PDOvt->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try
{
$Q2 = "SELECT @GRUPID:=nDeger as grupId FROM Lookup WHERE cAlan = 'nGrupId' FOR UPDATE;";
$Q3 = "UPDATE Lookup SET nDeger = nDeger + 1 WHERE cAlan = 'nGrupId';";
$Q4 = "UPDATE Isler SET nGrupId = @GRUPID
WHERE
konukID = :oturumKaydi
AND
kID = :kid
AND
nSiparisDurum = '-1'
AND
(durum = 4 OR durum = 5);";
$PDOvt->beginTransaction ();
$SMTP2 = $PDOvt->prepare ($Q2);
$SMTP3 = $PDOvt->prepare ($Q3);
$SMTP4 = $PDOvt->prepare ($Q4);
$SMTP4->bindValue (':oturumKaydi', $this->oturum_kaydi, PDO::PARAM_STR);
$SMTP4->bindValue (':kid', $this->kullanici_id, PDO::PARAM_INT);
$SMTP2->execute ();
$SMTP3->execute ();
$SMTP4->execute ();
$PDOvt->commit ();
$GRUPID = $SMTP2->fetchAll (PDO::FETCH_CLASS);
$_SESSION['iliskili_grup'] = $GRUPID[0]->grupId;
$this->iliskili_grup = $GRUPID[0]->grupId; // not incremented value
$PDOvt = null;
$this->debuggrupid = $vt->get_var("SELECT nDeger FROM Lookup WHERE cAlan = 'nGrupId' FOR UPDATE;"); // incremented value;
} catch (PDOException $e)
{
$PDOvt->rollBack ();
echo "HATA!";
}
nDeger の最後の値を確認するために、別の接続を使用して最後のクエリを 1 つ追加しましたが、インクリメントされているように見えます。
しかし、ルックアップをインクリメントする前に、mysql が「Isler」を更新しているようです。2つの更新の位置を変更しようとしましたが、何も変わりません。