请参考下图.在此图像中,数字(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变得疯狂!那么,我是否:(最近两天坚持这个(头痛得厉害)!
你的逻辑有一点点缺陷.
第一次循环运行时,您正在更新一行 - 您将位置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)
我没有测试过,但它至少应该给你一个想法.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |