php - 此选择更新是否需要回滚(不返回行)?

标签 php mysql pdo rollback

$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/

相关文章:

javascript - 使用 mysql 表进行表单验证

PHP PDO bindParam 落在了 foreach 中

php - 从 python 调用 php 脚本(子进程)

mysql - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES) - No Privileges?

php - 加密 MySQL 表中数据的好方法?

php - 如何连接多个 MySQL 查询

php - 如何使用 PDO 将空字符串插入日期列?

php - PDO 更新查询中的跟踪错误

PHP PDO : Why does Inserting NULL yields to 0

php - mysql变量声明与php中的查询