gpt4 book ai didi

php - 锁定表如何工作?

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

我有一个 php 脚本,将“同时”请求多次 我在表中还有一个字段,我们称它为 persons 作为标志活跃/不活跃。我希望当脚本的第一个实例运行时将该字段设置为非事件状态,以便其余实例在检查该字段时死亡。有人可以为此提供解决方案吗?我怎样才能确保这个脚本只运行一次?

PHP、PDO、MySQL

非常感谢您。

最佳答案

您的脚本应该使用锁定读取来获取事务中的当前标志,例如 SELECT ... FOR UPDATE :

$dbh = new PDO("mysql:dbname=$dbname", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

$dbh->beginTransaction();

// using SELECT ... FOR UPDATE, MySQL will hold all other connections
// at this point until the lock is released
$qry = $dbh->query('SELECT persons FROM my_table WHERE ... FOR UPDATE');

if ($qry->fetchColumn() == 'active') {
$dbh->query('UPDATE my_table SET persons = "inactive" WHERE ...');
$dbh->commit(); // releases lock so others can see they are inactive

// we are the only active connection
} else {
$dbh->rollBack();
// we are inactive
}

关于php - 锁定表如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444164/

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