我有以下查询:
$query = "UPDATE list SET locked=1, @id:=id WHERE worked=0 and is404=0 AND error=0 AND locked=0 LIMIT 1;SELECT * FROM list WHERE id=@id;";
$stmt = $pdo->prepare($query);
if ($stmt->execute()) {
$model = $stmt->fetch(PDO::FETCH_OBJ);
if ( isset($model) && !isset($model->id) ) {
echo json_encode(array('error' => -1, 'type' => 'No URL'));
exit;
}
}
我要完成的工作是使用称为“锁定”的字段之一来锁定行,从而避免在它们之间进行其他并行处理。
如果我在控制台中运行查询,则可以正常工作,并通过UPDATE中使用的@id返回锁定的行。
在php中使用PDO时会出现问题。该行被锁定,但SELECT语句不返回任何内容。
我的代码有什么问题?
这不是一个查询,而是两个查询
$pdo->query("UPDATE list SET locked=1, @id:=id WHERE worked=0 and is404=0 AND error=0 AND locked=0 LIMIT 1");
$stmt = $pdo->query("SELECT * FROM list WHERE id=@id");
$model = $stmt->fetch(PDO::FETCH_OBJ);
也就是说,您选择的锁定模型不可靠,两个并行进程可能返回相同的ID
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。