You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fetch调用PDO执行UPDATE返回成功但数据库值未更新怎么办

问题1:传入的状态值没有取反,执行了无变化的UPDATE

你当前按钮传的是数据库里able_to_order的原值:比如当前状态是可订购(值为1),按钮显示「Disable」,你调用函数时传的还是1,最终执行的SQL是把able_to_order设为和原值一样的1,自然不会有数据变化。

修改HTML里的函数调用逻辑,传入取反后的状态值即可:

<button
  class="btn <?=$row["able_to_order"] == 0 ? "btn-success" : "btn-danger" ?>"
  onclick="changeProductAvailability(<?= $row['id'] ?>, <?= $row['able_to_order'] == 1 ? 0 : 1 ?>)">
  <?=$row["able_to_order"] == 1 ? "Disable" : "Enable" ?>
</button>

问题2:PHP端的执行结果判断逻辑错误

你现在判断的是!$stmt,但只要SQL语法没有问题,prepare()方法永远会返回PDOStatement对象,!$stmt永远为假,哪怕execute()执行失败也会输出「Sucessfully changed」,完全不能反映真实执行结果。

修改PHP代码,判断execute的返回结果和实际影响的行数即可:

$query_sql = "UPDATE product SET able_to_order = :able WHERE id = :id";
$data = [
    "able" => $_POST['able'],
    "id" => $_POST['product']
];
$stmt = $conn->prepare($query_sql);
$execResult = $stmt->execute($data);

if (!$execResult) {
    echo "更新出错:" . implode(" ", $stmt->errorInfo());
} else if ($stmt->rowCount() === 0) {
    echo "无数据变更,传入值与原值一致";
} else {
    echo "修改成功";
}

内容的提问来源于stack exchange,提问作者Mccitea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:27:03