1

次のコードを使用して、「ルックアップ」テーブルを更新した後 (「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つの更新の位置を変更しようとしましたが、何も変わりません。

4

0 に答える 0