Php 在执行commit()之前重定向
以下是我的脚本结构:Php 在执行commit()之前重定向,php,redirect,transactions,Php,Redirect,Transactions,以下是我的脚本结构: try { $dbh_conn->beginTransaction(); $stmt1 = $dbh_conn->prepare("UPDATE ..."); $stmt1->execute(array($val1)); if ( condition 1 ) { $stmt2 = $dbh_conn->prepare("DELETE ..."); $stmt2->execute
try {
$dbh_conn->beginTransaction();
$stmt1 = $dbh_conn->prepare("UPDATE ...");
$stmt1->execute(array($val1));
if ( condition 1 ) {
$stmt2 = $dbh_conn->prepare("DELETE ...");
$stmt2->execute(array($val2));
header('location: ../page1');
exit;
} else {
header('location: ../page2');
exit;
}
$dbh_conn->commit();
} catch(PDOException $e) {
$dbh_conn->rollBack();
echo $e;
}
它出人意料地有效。。如您所见,有一个if-else
语句(总是执行其中一个),这两个块(if和else
)都有一个出口代码>。另外$dbh_conn->commit()代码>行位于该if-else
语句之后
实际上,永远不应该执行这两个查询。因为有退出代码>在提交()之前
。但这两个查询也会执行。那么PHP是如何编译我的脚本的呢?我的脚本结构还可以吗?(不需要更改什么?如果您的表是MYISAM,那么事务将无法工作
但是,mysql api不会中断,事务性函数/方法不会抛出错误,它们只是看起来工作正常,但每次数据库更新都会在发生时提交。exit
会立即终止脚本!但是如果您设置了自动提交,那么除非您运行回滚
数据将被提交,否则实际上还有另一种可能性!这些是MYISAM表吗,因为事务在MYISAM上不起作用,但它允许您仍然使用事务表syntax@RiggsFolly耶。。就是那个。哪一个是那个。。。。正如一位老剑客曾经对梅米说的那样,这里只有一个引擎是米萨姆