根据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 作业启动的两个不同进程上,它们是否可以访问彼此的用户定义变量?
例如,在第一个进程能够读取值之前,第二个进程是否可以更新第一个进程设置的值?
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/