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