使用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
相关产品推荐
相关产品推荐

