gpt4 book ai didi

php - 选择并锁定一行然后更新

转载 作者:行者123 更新时间:2023-11-29 04:20:02 24 4
gpt4 key购买 nike

我有一个脚本可以从 MySQL 数据库中选择一行。然后更新这一行。像这样:

$statement = $db->prepare("SELECT id, link from persons WHERE processing = 0");
$statement->execute();
$row = $statement->fetch();

$statement = $db->prepare("UPDATE persons SET processing = 1 WHERE id = :id");
$success = $statement->execute(array(':id' => $row['id']));

脚本同时多次调用此 php 代码。有时它会选择该行,尽管它应该是“processing = 1”,因为另一个脚本会在准确的时间调用它。

我怎样才能避免这种情况?

最佳答案

你需要做的是在这里添加某种锁来防止像你创建的那样的竞争条件:

UPDATE persons SET processing=1 WHERE id=:id AND processing=0

这样可以避免双重锁定。

要进一步改进这一点,请创建一个可用于声明的锁定列:

UPDATE persons
SET processing=:processing_uuid
WHERE processing IS NULL
LIMIT 1

这需要一个 VARCHAR,索引 processing 列,用于声明默认值为 NULL。如果您在结果中修改了一行,则您已经声明了一条记录并可以通过以下方式使用它:

SELECT * FROM persons WHERE processing=:processing_uuid

每次您尝试领取时,生成一个新的领取 UUID key 。

关于php - 选择并锁定一行然后更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26996307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com