PHP执行了多个MYSQL查询,但只执行了最后一个查询

PHP执行了多个MYSQL查询,但只执行了最后一个查询,php,mysqli,Php,Mysqli,我正在尝试运行两个查询,以便在单击“向上”或“向下”按钮时交换数据库中的排序顺序值,但在运行第二个查询时执行下面的代码 if ($_POST['up']){ $sort_this = $_POST['sort']; $sort_other = $_POST['sort'] - 1; $sql_this = "UPDATE portfolio SET sort = $sort_this -1 WHERE sort = $sort_this"; mysqli_que

我正在尝试运行两个查询,以便在单击“向上”或“向下”按钮时交换数据库中的排序顺序值,但在运行第二个查询时执行下面的代码

if ($_POST['up']){
    $sort_this = $_POST['sort'];
    $sort_other = $_POST['sort'] - 1;

    $sql_this = "UPDATE portfolio SET sort = $sort_this -1 WHERE sort = $sort_this";
    mysqli_query($conn, $sql_this);

    $sql_other = "UPDATE portfolio SET sort = $sort_other +1 WHERE sort = $sort_other";
    mysqli_query($conn, $sql_other);
}
当我对另一个进行注释时,它们各自都工作得非常好,但是当它们都显示时,问题如上所述。我也尝试过在mysqli_multi_查询中运行它,但是这也不起作用

有什么想法吗?
谢谢

鉴于数据量有限,我最好的猜测是它们都执行了,但它们没有做你认为它们应该做的事情

假设$u POST['sort']是数字3,这意味着$sort\这也是3。 第一个查询将遍历数据库并将所有3更新为2

$sort_other将是3-1(2),因此第二个查询将遍历数据库并将所有2更新为3。有效地撤消了第一个查询所做的操作。(并将任何其他2更改为3)

您永远不会看到第一个查询的最终结果,因为第三个查询将覆盖第一个查询所做的所有更改


此外,像您现在这样简单地将变量粘贴到查询中是不好的做法。它倾向于SQL注入。您可以通过使用预先准备好的语句来避免这种情况:

$sort\u other=$\u POST['sort']-1
设置排序=$sort\u其他+1
-Um。。。你不是要取消这些吗?就我记忆中的数学而言,-1加+1等于0。$sort\u other=$\u POST['sort']-1;是标识符,例如,如果此行为5,则另一行为5-1=4。SET sort=$sort\u other+1是我想要的新值,无论我使用SET sort=$sort\u other+1还是$sort\u,它们都是相同的。我将您的注释添加到问题中(作为编辑)以进行澄清。下面也给了你一个答案。问题:这是为了什么?我看到单词“sort”,这表明您可能想在某个地方运行SELECT查询,以便对列进行“排序”;我说的对吗?如果没有,你需要详细说明你想做的事情的真正目的是什么。在我的数据库中,我有一个列来排序内容的显示顺序。我正在尝试实现向上和向下按钮,如果我单击向上,该行将显示在前一行的上方。例如,如果我的数据库中有两个项目,apple和orange,排序值分别为1和2,如果我点击orange,它的排序值变为1,apple则变为2。我想这是一个很好的解释,我(基本上)在评论中说的-1加+1将自己取消。我用OP的评论编辑了这个问题,他想达到什么目的。如果他们都在更新同一行,但在更新不同的行,我可以看到你在说什么$sort_this=5,$sort other=4。来自第一个查询:其中sort=$sort\u this。从第二个查询:其中sort=$sort\u otherLee perkins,它们没有更新不同的行。数据库在两个查询之间更改。给定值5(根据您的新编辑),sort_将变为“5”,sort_其他将变为4。第一个查询将是更新投资组合集sort=4,其中sort=5在此之后,数据库中的所有原始5将是4,第二个查询将是:更新投资组合集sort=5,其中sort=4在此之后,数据库中的所有4(包括第一个查询中的4)将成为5。在这样做的过程中,第二个查询与第一个查询相反:)因为所有的5变成了4,现在变成了5Ahhh是的,我明白你们在说什么了,我的错。谢谢你指出这一点。回到绘图板:(好吧,如果你告诉我们你需要什么,我们也许能帮上忙:)