MYSQL循环更新行值分开

时间:2016-01-28 21:16:23

标签: php mysql

我有以下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';   ?>

我希望“按下”按下按钮以更新表中的相关行值,但是当我使用此代码时,我会更新所有值。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

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

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

SET子句中,您也不需要围绕计算的括号。

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

SELECT ID FROM tbname WHERE *some condition is met*

一旦这样做,您就可以根据需要更新记录的子集。

由于您使用的是MySQLi,因此您应该了解prepared MySQLi语句,以防范潜在的SQL Injection Attacks.

此外,您应该对您的连接和查询进行错误检查,例如or die(mysqli_error())。如果不是,您将不得不查看错误日志,以解决您可能遇到的任何问题。

答案 1 :(得分:1)

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

<?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';
}
?>