0

私のphpサイトには、次々と実行するいくつかのSQLクエリがあります。

1 つが失敗した場合、残りを挿入し続けないようにトランザクションを実装することを考えました。

ただし、コードにトランザクションを実装した後、挿入が行われなくなっていることがわかりました。

私がどこで間違っているのか、私が直面している問題をどのように修正できるのかを誰かが指摘できますか?

        $db = getConnection();

        try{
            /* Begin a transaction, turning off autocommit */
            $db->beginTransaction();

            $stmt = $db->prepare('INSERT INTO Orders VALUES(\'\', :ref, :date, :aid, 1)');
            $stmt->bindParam(':ref', $referenceCode);
            $stmt->bindParam(':date', $date);
            $stmt->bindParam(':aid', $agentId);
            $stmt->execute();

            $stmt = $db->prepare('UPDATE Agents SET Agent_OrderCount = :cow WHERE Agent_Id = :aid');
            $stmt->bindParam(':cow', $counter);
            $stmt->bindParam(':aid', $agentId);
            $stmt->execute();

            $db->commit();                  
            sendResponse(200, '{"Error":"0", "Message":"Successfully created order"}');
                return;
        }
        catch(PDOException $e){
        /* Recognize mistake and roll back changes */
            $db->rollBack();
            sendResponse(400, '{"Error":"3002", "Message":"'. $e->getMessage() .'"}');
            return;
        }

トランザクション コードを挿入する前に、すべての挿入クエリが正常に機能していたことを確認できます。

4

1 に答える 1

0

誰かが私が間違っているところを指摘できますか

もちろん。
サーバーに質問する代わりに、Stackoverflowでこの質問を再質問します。
PDO接続を作成した後、この属性を設定します

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

その後、コードを再度実行します

人間はコードを実行することを意図していません。はい、間違いを見つけることができます。ただし、問題が1つあります。投稿したコードにエラーはありませんが、どこか別の場所にあります。したがって、コードを見るだけではほとんど意味がありません。コードを実行する必要があります。また、エラー報告を設定する必要があります。したがって、自分のサーバーが何が問題になっているのかを教えてくれます。このヘルプは、コードを消化するのに少し時間がかかる人からのものよりもはるかに信頼性が高くなります。

于 2013-02-16T14:47:00.623 に答える