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;
?>
答案 0 :(得分:0)
首先(很遗憾,这很明显,但是我意识到并不是所有人都清楚)SQL和PHP是不同的语言。 MySQL服务器将不响应PHP代码中触发的未定义变量通知。
第二,通知不是例外,因此它们不能被try / catch语句捕获。 (您当然可以编写一个自定义错误处理程序,该处理程序将在错误上引发异常,但在这里似乎并非如此。)