为什么PHP脚本和MySQL数据库数据的输出不一样?

Ift*_*mud 0 php mysql

请参考下图.在此图像中,数字(1)是我运行代码之前数据库userdb中的字段位置.数字(2)是我在运行代码后在某些行的位置字段中所期望的变化.第二行的位置字段的值主要是2,我想要更改为3.同样,第三行,第四行和第五行的位置字段的值分别主要是3,4和5,我想要更改分别为4,5和6.所以,我运行以下代码,在我的浏览器中,我看到了我的期望.但是,在数据库中,我看到插入了错误的数据,如图像上的数字(3).请注意,我的位置字段的最后期望值是6(对于第五行),但我在所有行中得到6!

在此输入图像描述

这是我运行的代码:

            $requestedPosition = 2;  $oldPosition = 6;

        for($i=$requestedPosition+1; $i <= $oldPosition; $i++){

        $query = mysql_query("UPDATE userdb SET position = '$i' WHERE position='{$requestedPosition}' ");

            echo 'Old Position: '.$requestedPosition.' is now: '.$i.'<br>';
        $requestedPosition++;
        }
Run Code Online (Sandbox Code Playgroud)

我认为在mysql查询中一定有问题.如果我注释掉查询,我会在浏览器中获得预期的结果.但是,要将这些数据插入数据库,我需要运行查询,但是当我这样做时,我会在数据库中插入错误的数据.我在Windows上运行PHP 5.3.13,MySQL 5.5.24.

最令人困惑的是,在for循环中,如果我改变$ i = $ requestedPosition + 1; to $ i = $ requestedPosition; 插入2,3,4,5(分别在第2,第3,第4,第5行)而不是6,6,6,6.但是,我想要3,4,5,6插入(分别在第2,第3,第4,第5行),所以我不得不使用$ i = $ requestedPosition + 1; 在for循环中,当我这样做时,Code变得疯狂!那么,我是否:(最近两天坚持这个(头痛得厉害)!

and*_*wsi 5

你的逻辑有一点点缺陷.

第一次循环运行时,您正在更新一行 - 您将位置2的行更新为位置3.这很好.

但是第二次循环运行时,你将位置为3的所有行更新为位置4 - 现在有两个,表中的一个,以及刚刚更新的那一行.第三次和第四次迭代也是如此.

你可以通过一个电话更优雅地做到这一点:

$query = mysql_query("UPDATE userdb SET position = position + 1 WHERE position >={$requestedPosition} AND position <= ${oldPosition}' ");
Run Code Online (Sandbox Code Playgroud)

我没有测试过,但它至少应该给你一个想法.