【发布时间】:2016-05-15 14:49:45
【问题描述】:
这是我的脚本:
$id = $_GET['id'];
$value = $_GET['val'];
// database connection here
try{
$db_conn->beginTransaction();
// inserting
$stm1 = $db_conn->prepare("INSERT into table1 (col) VALUES (?)");
$stm1->execute(array($value));
// updating
$stm2 = $db_conn->prepare("UPDATE table2 SET col = "a new row inserted" WHERE id = ?");
$stm2->execute(array($id));
$db_conn->commit();
}
catch(PDOException $e){
$db_conn->rollBack();
}
我想知道的是,我可以在beginTransaction() 和commit() 之间的代码中使用if 语句吗?像这样的:
$id = $_GET['id'];
$value = $_GET['val'];
// database connection here
try{
$db_conn->beginTransaction();
// inserting
$stm1 = $db_conn->prepare("INSERT into table1 (col) VALUES (?)");
$stm1->execute(array($value));
// updating
if (/* a condition here */){
$stm2 = $db_conn->prepare("UPDATE table2 SET col = "a new row inserted" WHERE id = ?");
$stm2->execute(array($id));
}
$db_conn->commit();
}
catch(PDOException $e){
$db_conn->rollBack();
}
我可以吗?
其实我是这么问的,因为here 是一句说你不能,这样做很危险:
不起作用并且很危险,因为您可能使用嵌套的 commit() 过早关闭事务。
【问题讨论】:
-
再次阅读那里的评论。他说,嵌套事务而你只有一个。
-
@Chay22 我读了好几遍了。问题是我的英语不好。。还是谢谢你。
-
哈,我们也有同样的问题。