$stmt = $pdo->prepare("SELECT somedata FROM mytable FOR UPDATE");
$pdo->beginTransaction();
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ( $row == FALSE ) {
$pdo->rollBack();
} else {
....run some code and then commit
回滚是否是必要的,因为只有在没有行被返回而没有行被锁定时才会调用回滚?在实际未选择任何内容的情况下,选择更新并且从不回滚或提交是否会浪费任何资源?
最佳答案
在选择更新中,所选行会根据您使用将自动提交设置为 0 的 beginTransaction 的方式获得行锁(当然必须是 innodb,但我假设您知道这一点)。
要释放锁,您可以提交或回滚。
就我个人而言,我会在适合回滚的错误情况下保留回滚,因此我不会回滚,而只是通过提交来结束该 block ,并将整个内容放在 try -- catch block 中。那么您就不需要关心解锁机制或是否选择了行。
try {
$stmt = $pdo->prepare("SELECT somedata FROM mytable FOR UPDATE");
$pdo->beginTransaction();
$stmt->execute();
while ($row = ....) {
}
$pdo->commit();
} catch( PDOException $Exception ) {
$pdo->rollback();
}
关于php - 此选择更新是否需要回滚(不返回行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22870472/