点击删除按钮无法删除数据库中购物车行的原因排查
先贴出相关代码:
PHP处理逻辑:
<?php if (isset($_POST['delete_button'])) { $id = $_POST['id']; $stmt = $pdo->prepare("DELETE FROM user_favourites WHERE user_fav_id = :user_fav_id"); $stmt->bindParam(':user_fav_id', $id); $stmt->execute(); header("Location: index.php?p=account"); exit(); } ?>
表单按钮代码:
<form method="POST"> <input type="hidden" name="id" value="<?php echo $fav['user_fav_id'] ?>"> <button type="submit" name="delete_button">Delete</button> </form>
可能的原因:
隐藏字段
id没传对值:检查$fav['user_fav_id']是否真的拿到了正确的记录ID。可以在表单里临时加一行<?php echo $fav['user_fav_id'] ?>,看看页面上显示的是不是数据库里存在的user_fav_id值,会不会是空的或者错误的。SQL执行出错但没被发现:当前代码没处理
execute()的失败情况,直接跳转了。可以在$stmt->execute()后面加个判断,比如:if (!$stmt->execute()) { print_r($stmt->errorInfo()); exit; }这样就能看到具体的错误信息,比如表名写错、字段名不对,或者数据库权限不够删不了数据。
表名/字段名和实际数据库不匹配:确认数据库里的表确实叫
user_favourites,字段确实是user_fav_id,注意大小写——比如Linux环境下MySQL的表名是区分大小写的,要是你代码里写的是User_Favourites但实际表是user_favourites就会出错。PDO连接有问题:确保
$pdo这个连接实例是正确连到目标数据库的,有没有连错库,或者连接的时候就失败了但没报错。提交请求没触发删除逻辑:检查表单提交的
POST数据里有没有delete_button这个键。可以在PHP代码开头加var_dump($_POST);,看看提交后输出的内容里是不是包含delete_button和id,会不会是按钮的name属性拼写错了。事务没提交:如果之前代码里开启了PDO事务(比如
$pdo->beginTransaction()),但没执行$pdo->commit(),那DELETE操作会被回滚,数据库里就看不到变化。
内容的提问来源于stack exchange,提问作者Gibby1711

