RollBack()和beginTransaction()在我的PHP PDO中不起作用

时间:2018-07-15 08:14:22

标签: php mysql database pdo

RollBack ()beginTransaction()在我的PHP PDO中不起作用,并且我的表类型为innoDB。在以下代码中,我的$sql1是正确的,我的$sql2是错误的(我在d上添加了$last_id只是为了使它出错)。但是它仍然执行sql1,意味着回滚无效。谢谢您的建议。

<?php

include 'connect.php';
// Get multiple input field's value



try {
   // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


   // Starts our transaction
   $conn->beginTransaction();

   foreach ($_POST['phone'] as $value) {

       $sql1 = "INSERT INTO tbl_contact_info (type)
       VALUES ('$value')";    

       // use exec() because no results are returned
       $conn->exec($sql1);
       $last_id = $conn->lastInsertId();

       $sql2="INSERT INTO tbl_img (img_type)
       VALUES ('$dlast_id')";    

       $conn->exec($sql2);    

   }
   // Commits out queries
   $conn->commit();
   echo "New record created successfully";    

}

catch(PDOException $e)
   {
   // Something borked, undo the queries!!    
   $conn->rollBack();    

   echo $sql . "<br>" . $e->getMessage();
   }

$conn = null;
?>

1 个答案:

答案 0 :(得分:0)

首先(很遗憾,这很明显,但是我意识到并不是所有人都清楚)SQL和PHP是不同的语言。 MySQL服务器将不响应PHP代码中触发的未定义变量通知。

第二,通知不是例外,因此它们不能被try / catch语句捕获。 (您当然可以编写一个自定义错误处理程序,该处理程序将在错误上引发异常,但在这里似乎并非如此。)