开发者社区> 问答> 正文

MySQL-使用UDPATE&SELECT锁定行-PHP中的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_OBJ);
    if ( isset($model) && !isset($model->id) ) {
        echo json_encode(array('error' => -1, 'type' => 'No URL'));
        exit;
    }
}

我要完成的工作是使用称为“锁定”的字段之一来锁定行,从而避免在它们之间进行其他并行处理。

如果我在控制台中运行查询,则可以正常工作,并通过UPDATE中使用的@id返回锁定的行。

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

我的代码有什么问题?

展开
收起
几许相思几点泪 2019-12-29 20:57:31 6354 0
1 条回答
写回答
取消 提交回答
  • 这不是一个查询,而是两个查询

    $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

    2019-12-29 20:57:49
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像