实现BeginTransaction后SQL INSERT问题

时间:2013-02-16 14:41:13

标签: sql transactions pdo

我的php网站上有一些SQL查询,我一个接一个地执行。

我想过实现事务就像一个失败然后不再继续插入其余部分。

然而,在我的代码中执行事务后,我发现插入不再发生。

有人能指出我哪里出错了,以及如何解决我所面临的问题?

        $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;
        }

在插入交易代码之前,我可以向您保证所有插入查询都运行良好。

1 个答案:

答案 0 :(得分:0)

  

有人能说出我出错的地方

不确定。
您在Stackoverflow上询问此问题而不是询问您的服务器 在创建PDO连接后设置此属性

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

然后再次运行您的代码

人类不打算运行代码。是的,我们可以发现一些错误。但是有一个问题:您发布的代码中没有错误,但在其他地方。所以,只是看代码没什么意义。代码必须运行。并且必须设置错误报告。所以,你自己的服务器会告诉你出了什么问题,这个帮助比那些花一点时间来消化代码的人更可靠。