我有一个表,其中每一行代表一个可供消费者使用的资源。资源只能由一个消费者随时使用。消费者选择可用资源并随机选择一个。为了确保使用者可以使用它选择的资源,我有以下SQL语句:UPDATE resource SET is_in_use=1 WHERE is_in_use=0 AND id=?
如果受影响的行= 1,我认为这意味着消费者独占使用该资源。不是这样。我偶尔会遇到将多个消费者分配给单个资源的情况。
完整的PHP代码:
public function useResource() {
$mysqli = secureMysqli();
if ($stmt = $mysqli->prepare("UPDATE resource SET is_in_use=1 WHERE is_in_use=0 AND id=?")) {
$stmt->bind_param('i', $this->id);
if($stmt->execute())
{
if($mysqli->affected_rows == 1) {
return true;
} else {
return false;
}
} else {
return false;
}
}
return false;
}