2013-02-16 87 views
0

我在我的php网站上有几个SQL查询,我一个接一个地执行。实施BeginTransaction后SQL INSERT问题

我想过如果一个失败就实现事务,那么不要继续插入其他事务。

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

任何人都可以指出我要出错的地方,以及我如何解决我所面临的问题?

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

在插入事务代码之前,我可以向你保证所有的插入查询都能正常工作。

回答

0

任何人都可以指出我要去哪里错了

肯定。
你在Stackoverflow上问这个问题,而不是问你的服务器。
有这个属性创建PDO连接

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

后设置和运行代码再次

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

+0

感谢您的留言,我会立即进行更改。 同时你能告诉我你应该问服务器,而不是在这里在stackoverflow? – Pavan 2013-02-16 14:49:21