我根据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作业启动的两个不同进程上,他们是否可以访问彼此的用户定义变量?
例如,在第一个进程能够读取值之前,第二个进程是否可以更新第一个进程设置的值?
用户定义的变量是特定于会话的。定义了用户变量 一个客户无法被其他客户看到或使用。
所以问题的根源可能是:两个独立的进程是由同一个cron作业发起的,被认为是不同的客户端吗?
否则,我最好的想法是在脚本打开时初始化一个随机数,并将其添加到每个变量名的末尾:
$rand = rand(100, 999);
$sql = "SET @update_id". $rand ." := '', @update_name". $rand ." := ''; ...";
但如果我能帮助它,我宁愿不这样做。即使凌乱的解决方案解决了它,对此的答案将是很好的知识,在后面的口袋里。
答案 0 :(得分:1)
问题的根源是:两个独立的进程是由同一个cron作业发起的,被认为是单独的客户端吗?
是。它与运行由同一浏览器启动的两个单独脚本没有什么不同。除非您明确地在两个脚本之间共享信息,否则它们将作为单独的会话执行。