【问题标题】:Why Output of PHP script and MySQL database data are not same?为什么 PHP 脚本和 MySQL 数据库数据的输出不一样?
【发布时间】:2014-04-03 22:50:52
【问题描述】:

请参考下图。在这张图片中,编号 (1) 是我的数据库 userdb 中的字段 position 在我运行代码之前的样子。数字 (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++;
        }

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

最令人困惑的是, 在 for 循环中,如果我将 $i=$requestedPosition+1; 更改为 $i=$requestedPosition;我插入了 2、3、4、5(分别在第 2、3、4、5 行)而不是 6、6、6、6。但是,我想插入 3、4、5、6(分别在第 2、3、4、5 行),所以我不得不在 for 循环中使用 $i=$requestedPosition+1;,并且当我这样做时,代码变得疯狂!那么,我是不是 :( 过去两天都被这个(头痛得很厉害)卡住了!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你的逻辑有点小错误。

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

    但是第二次循环运行时,您将位置为 3 的所有行更新为位置 4 - 现在有两个,一个来自表,另一个是您刚刚更新的。第三次和第四次迭代也是如此。

    您可能可以更优雅地做到这一点,只需一次调用:

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

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

    【讨论】:

    • 您好,您提供的查询由于某种原因不起作用(“位置 = 位置 + 1”,对吗?),但是您在逻辑中检测到的缺陷确实很有帮助。我会努力解决这个问题,并在它工作后立即更新。非常感谢!
    • @flight-87 - 很高兴它有帮助。 position=position+1 应该为与 WHERE 子句匹配的每一行增加 position。如果你让它工作,请随时编辑这个答案并添加实际工作!
    • 您提供的代码确实有效。它第一次不起作用的原因是它有一点打字错误和缺少引号。我后来更新了查询,它工作了。这是查询:$query = mysql_query("UPDATE userdb SET position = position + 1 WHERE position &gt;= '{$requestedPosition}' AND position &lt; '{$oldPosition}' "); 非常感谢您的帮助:)
    • 嗯。这真的很有趣 - 您是否将职位设置为 varchar 字段?
    • 没有。位置字段设置为 INT。为什么?您发现查询有什么异常吗?
    猜你喜欢
    • 2012-03-27
    • 2018-03-06
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2016-10-15
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多