php - UPDATE 根本不影响记录

标签 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 注入(inject)的风险。我对此是否正确,我的代码有什么问题?

最佳答案

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

...I don't see the risk for SQL injections. Am I right about this...

  1. 用户权限往往会随着时间的推移而改变,并且并不总是记得需要更新哪些使用这些权限的代码。
  2. 仅仅因为您在技术上可能不会明显容易受到 SQL 注入(inject)攻击,所以仍然存在可能给您的最终用户带来有害体验的问题。举个例子,在未来的某一天,一个新的 fetchCode 被添加到你的表中,它可能包含一个 ' 字符,比如 "9focuspoints's New Code"未转义的内容会破坏这一点,导致客户感到沮丧,甚至可能会接到不受欢迎的深夜客户服务电话,具体取决于操作的严重程度。

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


至于你问题的前一部分,我是,你应该对事件周围的变化抱有极大的怀疑:

...this code have been working previously but isn't anymore...

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

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

关于php - UPDATE 根本不影响记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260531/

相关文章:

php - 如何使用自动增量更新字段 CONCAT?

php在Mysql中序列化数据

php - 我的 php 上传脚本没有结果?

PHP-无法从数据库下载.pdf文件,文件内容存储在mysql数据库中

java - MySQL 重复事件

php - 在 JQuery 中调用/获取 php 变量值

mysql 联合与 joomla

php - Prestashop Collection 加入数据库

php - 检测 MySQL 数据库中更新的行是否已更改

PHP 邮件未显示在 Gmail 中,但显示在 Hotmail 和其他第 3 方/ISP 帐户中