为什么我的 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 行已更改”。
我正在尝试通过按钮的 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 行已更改”。