我在PHP中使用以下MySQL语句,这些语句直接在MySQLWorkBench中输入它们会产生截然不同的意外结果:
SET SQL_SAFE_UPDATES = 0;
SET @idx = 1;
UPDATE Database.Table SET sequence = 9999 WHERE category = 'MyCat' AND sequence = 15;
UPDATE Database.Table SET sequence = @idx := @idx + 1 WHERE category = 'MyCat' AND sequence >= 1 AND sequence <= 15 ORDER BY sequence;
UPDATE Database.Table SET sequence = 1 WHERE category = 'MyCat' AND sequence = 9999;
SELECT * FROM Database.Table WHERE category = 'MyCat';
它可以在MySQLWorkbench中按预期工作,但是在PHP中却完全怪异。例如,序列= 15的记录根本不会移动,而另一个无关的序列号可能会代替也可能不会代替。
最佳答案
您是使用PHP来执行尽可能多的独立查询还是执行单个多语句查询?
如果是第一个,则会话变量@idx
将不起作用。
无论如何,为什么要这样做呢?
像这样的简单查询有什么问题:
UPDATE
Database.Table
SET
sequence = IF(sequence = 15, 1, sequence + 1)
WHERE
category = 'MyCat'
AND sequence BETWEEN 1 AND 15
;
关于php - MySQL Workbench与PHP的效果不相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59639172/