我有以下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'; ?>
我希望“按下”按下按钮以更新表中的相关行值,但是当我使用此代码时,我会更新所有值。任何人都可以帮助我吗?
答案 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';
}
?>