UPDATE根本不影响记录

时间:2016-05-16 18:14:58

标签: php mysql

我正在尝试更新我的数据库中的某些记录,此代码以前一直在运行,但现在已经不存在了。将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注入的风险。我是对的,我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

至于问题的第二部分......

  

......我没有看到SQL注入的风险。我是对的......

  1. 用户权限往往会随着时间的推移而发生变化,而且并不总是记住利用这些权限的代码需要更新的内容。
  2. 仅仅因为您在技术上可能不会明显受到SQL注入攻击的影响,但仍然存在可能导致最终用户遭受有害体验的问题。举例来说,将来的某一天会在您的表格中添加一个新的fetchCode,其中可能包含'字符,例如"9focuspoints's New Code"字符,未转义可能会破坏这一点,从而导致受挫的客户甚至可能一个不受欢迎的深夜客户服务电话,取决于操作的严重程度。
  3. 这只是一种糟糕的形式,而且你已经完成了大部分的语法工作来实际准备语句,所以你也可以完成这项工作。

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

      

    ...此代码以前一直在运作,但现在不再......

    自从这项工作以来发生了什么变化?如果这段代码没有改变,那么我怀疑你会在这里发布很多帮助。要检查的一些问题:

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