我正在尝试更新我的数据库中的某些记录,此代码以前一直在运行,但现在已经不存在了。将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注入的风险。我是对的,我的代码有什么问题吗?
答案 0 :(得分:0)
至于问题的第二部分......
......我没有看到SQL注入的风险。我是对的......
fetchCode
,其中可能包含'
字符,例如"9focuspoints's New Code"
字符,未转义可能会破坏这一点,从而导致受挫的客户甚至可能一个不受欢迎的深夜客户服务电话,取决于操作的严重程度。这只是一种糟糕的形式,而且你已经完成了大部分的语法工作来实际准备语句,所以你也可以完成这项工作。
关于问题的前一部分,我是,你应该对事件的变化过于怀疑:
...此代码以前一直在运作,但现在不再......
自从这项工作以来发生了什么变化?如果这段代码没有改变,那么我怀疑你会在这里发布很多帮助。要检查的一些问题:
var_dump
变量时,它们是否包含您期望的值?