PHP多个MYSQL查询执行,但只有最后一个工作


PHP multiple MYSQL queries executed but only last one working

我试图运行一对查询交换排序顺序值在一个数据库中当向上或向下按钮被点击,但是当他下面的代码执行在第二次查询是运行。

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_query中运行它,但是也不起作用。

任何想法?由于

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

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

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

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

此外,像您这样简单地将变量粘贴到查询中是不好的做法。容易发生SQL注入。您可以通过使用预处理语句来避免这种情况:http://php.net/manual/en/pdo.prepared-statements.php