0

我的 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;
        }

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

4

1 回答 1

0

谁能指出我哪里出错了

当然。
你在 Stackoverflow 上问这个问题,而不是问你的服务器。
创建 PDO 连接后设置此属性

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

然后再次运行您的代码

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

于 2013-02-16T14:47:00.623 回答