gpt4 book ai didi

php - MySQL - 用户定义的变量可以被 cron 作业调用的所有脚本读取吗?

转载 作者:行者123 更新时间:2023-11-29 11:29:18 25 4
gpt4 key购买 nike

根据this SO answer,我按照以下方式定义变量:

$sql = "SET @update_id := '', @update_name := '';
UPDATE table SET status=?, id=(SELECT @update_id:=id), name=(SELECT @update_name:=name)
WHERE status=? AND id>? ORDER BY id ASC LIMIT 1;";

$stmt = $db->prepare($sql);
$stmt->execute(array(1, 0, $curRow));

然后在连续的查询中访问它们:

$stmt = $db->prepare('SELECT @update_id, @update_blogid');
$stmt->execute();

这用于在更新时标记行。该表很大,因此有几个同时运行的脚本,以帮助加快速度。

如果脚本相同,但位于由 cron 作业启动的两个不同进程上,它们是否可以访问彼此的用户定义变量?

例如,在第一个进程能够读取值之前,第二个进程是否可以更新第一个进程设置的值?

According to the docs

User-defined variables are session-specific. A user variable defined by one client cannot be seen or used by other clients.

所以问题的根源可能是:由同一个 cron 作业启动的两个单独的进程是否被视为单独的客户端?

否则,我最好的想法是在脚本打开时初始化一个随机数,并将其附加到每个变量名称的末尾:

$rand = rand(100, 999);

$sql = "SET @update_id". $rand ." := '', @update_name". $rand ." := ''; ...";

但如果我能帮忙的话,我宁愿不这样做。即使困惑的修复解决了这个问题,这个问题的答案也将是放在后口袋里的好知识。

最佳答案

So many the root of the question is: are two separate processes, initiated by the same cron job, considered separate clients?

是的。这与运行由同一浏览器启动的两个单独的脚本没有什么不同。除非您在两个脚本之间显式共享信息,否则它们将作为单独的 session 执行。

关于php - MySQL - 用户定义的变量可以被 cron 作业调用的所有脚本读取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686785/

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