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

标签 php mysql cron

根据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/

相关文章:

php - 谷歌地图 API v3 : How to Set Zoom Level And Map Center To User Submitted Location?

php - 如何从相关表的同一字段回显值

php - 如何使用 cron 每天执行一次查询并将结果输出到平面文件?

django - cron 作业 'django-cron' 未在 ubuntu crontab 中运行

php - 哪本 PHP/MySQL 书籍适合作为教科书?

javascript - ajax 数组上的 PHP 序列化不起作用

php - 如何检测在 2 个日期时间列之间搜索的事件

sql - 如何在 MySQL 中将 BLOB 转换为 TEXT?

elasticsearch - Shell和Cron之间的馆长版本差异

php - 修复 SQL 和循环以自动将数据放入 CGridView