MYSQL 循环单独更新行值


MYSQL loop update row value separately

我有以下PHP:

<?php
$connection=mysqli_connect("host","user","pass","db");
if (mysqli_connect_errno())
    {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
$result = mysqli_query($connection,"SELECT ID FROM tbname");
while($row = mysqli_fetch_array($result))
   {
    mysqli_query($connection,"UPDATE tbname SET amount= (amount+ 1) WHERE ID='$row[ID]' ");
   }
mysqli_close($connection);
echo 'OK';   ?>

我想"核心化"按下按钮以更新表中的关联行值,但是当我使用此代码时,我更新了所有值。谁能帮我?

这假设您的 ajax 请求正在传递一个 'id' 参数。请注意,此代码容易受到 SQL 注入攻击。 我假设您知道如何正确清理您的输入并参数化您的查询以保护自己。 如果你不这样做,Jay的答案包括一些你应该检查的好链接。

<?php
if(!empty($_POST["id"]))
{
    $id = $_POST["id"];
    $connection=mysqli_connect("host","user","pass","db");
    if (mysqli_connect_errno())
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        exit;
    }
    mysqli_query($connection,"UPDATE tbname SET amount= (amount+ 1) WHERE ID = '" . $id . "'");
    mysqli_close($connection);
    echo 'OK';
}
else
{
    echo 'NO ID PASSED';
}
?>

您必须正确标识数组中的变量并在查询中连接变量:

mysqli_query($connection,"UPDATE tbname SET amount = amount+ 1 WHERE ID='" . $row['ID']. "' ");

您也不需要在 SET 子句中的计算两边加上括号。

由于您要选择表中的所有行,然后循环遍历所有行并更改值(这不是您想要的),因此您必须使用过滤器进行选择:

SELECT ID FROM tbname WHERE *some condition is met*

完成此操作后,您将能够根据需要更新记录的子集。


由于您使用的是MySQLi,

因此您应该了解MySQLi的准备语句,以保护自己免受潜在的SQL注入攻击。

此外,还应使用错误检查,例如or die(mysqli_error())连接和查询。如果没有,则必须查看错误日志以找出这些日志可能遇到的任何问题。