根据选择更新表,可能使用锁定?

时间:2014-06-24 09:28:55

标签: php mysql sql transactions locking

我正在使用php并尝试使用mysql选择以下内容:

$state_id = $sql->query('select state_id from table1 where id='.$sql->escape_string($_REQUEST['id']));

if ($state_id == $_REQUEST['state_id']) {
    $res = $sql->query('update table1 set state_id=state_id+1, state="'.$sql->escape_string($_REQUEST['state']).'" where id='.$sql->escape_string($_REQUEST['id']));
    echo 1; // Passes
} else {
    echo 0; // Fails
}

我希望只有在state_id等于$ _REQUEST ['state_id']时才会发生更新,但我也希望将此条件的结果返回给客户端,所有这些都是在一个原子操作中完成的。我的想法可能是我可以锁定table1表并在回显0或1之前将其解锁。

这可能是一个更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我想你可能想要一个“SELECT .. FOR UPDATE”:

如果您使用的是InnoDB表:

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html