为什么我的 PDO 查询不使用 fetch() 执行?

Why does my PDO query doesn't execute with fetch()?

我正在尝试通过按钮的 onclick 事件执行更新语句,但我在 运行 上没有成功 api。

我有这个JavaScript函数:

const changeProductAvailability = (id,status) => {
  const formData = new FormData();
  formData.append('product', id);
  formData.append('able', status);
  fetch("change-availability.php", {
    method: "POST",
    body: formData,
  })
  .then((response) => response.text())
  .then((text) => {
    console.log(text);
  })
}

我在更改中有这个-availability.php:

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

  if (!$stmt) {
    echo "Error on updating"
  }else{
    echo "Sucessfully changed";
  }

在 html 上,我有一个按钮可以使用 2 个参数调用这样的函数:

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

PDO 语句有效,因为我尝试直接打开页面并更改为获取数据数组上的值。单击按钮时,我在控制台上看到“已成功更改”,但是,数据库中的值没有更改。我哪里做错了?

正如@esqew 所提到的,!$stmt 没有达到我的预期,相反我需要@aynber 解决方案来检查是否有任何行被更改。

我发现错误出在传递给查询的值中,而不是因为我传递的值已经存在于数据库中,返回“0 行已更改”。