2012-02-23 78 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

相关问题