我有以下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())
连接和查询。如果没有,则必须查看错误日志以找出这些日志可能遇到的任何问题。