2013-02-16 92 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