UPDATE没有';根本不会影响记录


UPDATE doesn't affect the record at all

我正在尝试更新数据库中的一些记录,这段代码以前一直在工作,但现在已经不工作了。将id变量更改为固定数字后,代码仍然不会影响数据库。没有发出任何错误。

<?php
header('Access-Control-Allow-Origin: *');
error_reporting(E_ALL); 
ini_set("display_errors", 1);
$db = new PDO('mysql:host=localhost;dbname=xxx;charset=utf8', 'xxx', 'xxx');
$party = ($_POST['party']);
$id = ($_POST['id']); // $id is a string with ids separated by commas (1,2,3,4 e.t.c.)
$state = ($_POST['state']); // $state is either 1 or 0.
$code = ($_POST['fetchCode']);
$stmt = $db->prepare("UPDATE wishes SET state = $state WHERE fetchCode = '$code' AND partyID = '$party' AND id IN ($id); ");
$stmt->execute();
echo json_encode("Done");
?>

我用于数据库连接的用户只有更新状态列的权限,因此我看不到SQL注入的风险。我说得对吗?我的代码出了什么问题?

关于问题的第二部分。。。

我认为SQL注入没有风险。我说得对吗。。。

  1. 用户权限往往会随着时间的推移而变化,并且并不总是记得需要更新哪些使用这些权限的代码
  2. 正因为从技术上讲,您可能不太容易受到SQL注入攻击,所以仍然存在一些问题,这些问题可能会给您的最终用户带来有害的体验。例如,在未来的某一天,一个新的fetchCode会添加到您的表中,该表可能包含'字符(如"9focuspoints's New Code"),如果不跳过该字符,则会破坏这一点,导致客户感到沮丧,甚至可能会根据操作的严重程度打不希望的深夜客服电话

这只是一种糟糕的形式,而且你已经完成了大部分语法工作来实际准备语句,所以你还不如完成这项工作。


至于你问题的前一部分,我是,你应该对围绕事件的变化过于怀疑:

这个代码以前一直在工作,但现在不工作了。。。

自从这起作用以来发生了什么变化?如果这个代码没有改变,那么我怀疑你在这里发布它是否会得到很多帮助。需要检查的一些问题:

  1. SQL语句在独立客户端中运行时是否有效
  2. 当您在排除故障的过程中var_dump您的变量时,它们是否包含您期望的值