这是我的脚本结构:
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
)有一个exit;
。另外$dbh_conn->commit();
行在if - else
语句之后。
实际上从不执行这两个查询。因为exit;
之前有commit()
。但是两个查询都会执行。那么PHP如何编译我的脚本?我的脚本结构还可以吗? (无需更改内容?)
答案 0 :(得分:1)
如果你的桌子是MYISAM,那么交易不起作用。
但是,所以mysql api不会中断,事务函数/方法不会抛出它们看起来正常工作的错误,除非每个数据库更新都在发生时提交。