MySQL-在php中使用UDPATE和SELECT-PDO锁定行

MySQL-在php中使用UDPATE和SELECT-PDO锁定行,php,mysql,pdo,Php,Mysql,Pdo,我有以下疑问: $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_

我有以下疑问:

$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;
    }
}
我试图实现的是使用一个名为“locked”的字段锁定一行,从而避免在它们之间插入其他并行进程

如果我在控制台中运行查询,它工作正常,并返回更新中使用的@id锁定的行

在php中使用PDO时会出现问题。行被锁定,但SELECT语句不返回任何内容


我的代码出了什么问题

这不是一个查询,而是两个查询

也就是说,您选择的锁定模型不可靠,两个并行进程可能返回相同的id

$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);