2012-02-23 131 views
4

這是我用來插入記錄的代碼。無論何時出現插入錯誤,即使我有回滾,訂戶表自動編號仍將增加?問題是什麼? 我只是想在發生錯誤時不要添加自動增量編號。感謝您的幫助。帶有消息'沒有活動事務'的未捕獲異常'PDOException'?

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$conn->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE); 
$conn->beginTransaction(); 
try { 

    $email = $_POST['Email']; 
    $FirstName = $_POST['FirstName']; 
    $LastName = $_POST['LastName']; 


    $query="INSERT INTO subscriber (Email,FirstName,LastName,CreateDate) VALUES (?,?,?,CURDATE())"; 
    $stmt = $conn->prepare($query); 


    $stmt->bindParam(1, $email , PDO::PARAM_STR); 
    $stmt->bindParam(2, $FirstName, PDO::PARAM_STR); 
    $stmt->bindParam(3, $LastName, PDO::PARAM_STR); 
    $stmt->execute(); 
    $conn->commit(); 

} 
catch(PDOException $e) 
    { 
    $conn->rollBack(); 
    die ($e->getMessage()."<a href='addSub.php'>Back</a>"); 
    } 

$conn->beginTransaction(); 
try { 
    $userID = $_SESSION['username']; 
    $query="INSERT INTO list_sub (SubID,ListID) VALUES ('',$_SESSION[ListID])"; 
    $stmt = $conn->prepare($query); 
    $stmt->execute(); 
    $conn->commit(); 

} 
catch(PDOException $e) 
    { 
    $conn->rollBack(); 
    die ($e->getMessage()."<a href='addSub.php'>Back</a>"); 
    } 

$conn = null;} 

回答

6

沒有在你的代碼,它很難知道行號知道但你在第一個try-catch塊的最後提交事務,然後繼續,而無需在第二試戴開始一個新的事務catch塊。

在你的第二個try-catch塊的開頭添加$conn->beginTransaction();

編輯 - 你提到「我只想錯誤發生時,沒有添加自動遞增號」。您不應該依賴自動增量功能來生成「無間隙」數字序列。

+0

它不再顯示該錯誤消息,但它不會回滾。每當出現錯誤時,用戶表仍會增加自動增量編號。 – user782104 2012-02-23 18:23:20

+0

它應該自動增加 - 這是預期的行爲。 – thetaiko 2012-02-23 18:28:18

+0

這意味着我必須在我的PHP代碼中使用一些sql語句,例如'set table auto-inc number = x -1'來將其回滾?謝謝〜 – user782104 2012-02-23 18:30:13

5

PDO的自動提交可能是啓用,當您嘗試回滾它是導致問題,因爲它已經提交。您可以使用PDO::ATTR_AUTOCOMMIT來禁用此行爲:

$conn->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE); 
+0

謝謝我把它放在$ conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION); , 這可以嗎? – user782104 2012-02-23 18:22:15

+0

@ user782104:是的,應該沒問題。請記住,禁用此設置後,您將不得不手動提交每個查詢。 – FtDRbwLXw6 2012-02-23 18:24:31

+0

請看我編輯的版本。謝謝。 – user782104 2012-02-23 18:27:06

相關問題