PHP PDO执行UPDATE后数据库未更新 表单提交修改无效问题
问题原因及修复方案
1. 字段名拼写错误
UPDATE语句中写的title字段和实际表结构的字段名不符,从前面查询逻辑可知表中对应字段是titel,字段名不匹配导致更新不生效。
修改UPDATE语句对应字段:
// 原错误写法 $stmt = $connection->prepare('UPDATE films SET title = ?, duur = ?, datum_van_uitkomst = ?, land_van_uitkomst = ?, omschrijving = ?, link = ? WHERE id = ?'); // 修正后 $stmt = $connection->prepare('UPDATE films SET titel = ?, duur = ?, datum_van_uitkomst = ?, land_van_uitkomst = ?, omschrijving = ?, link = ? WHERE id = ?');
2. 表单提交后ID参数丢失
你的$array_id是从GET参数中获取的,但是表单用POST提交时没有携带id参数,提交后$array_id为空,WHERE条件匹配不到任何数据行,自然无法更新。
修复方案:在表单中添加隐藏域传递id参数:
<form method="POST" autocomplete="off"> <!-- 新增隐藏域 --> <input type="hidden" name="id" value="<?= $array_id ?>"> <!-- 原有表单内容不变 --> </form>
同时修改获取id的逻辑,优先从POST中取:
// 原写法 $array_id = $_GET["id"]; // 修正后 $array_id = isset($_POST['id']) ? $_POST['id'] : $_GET['id'];
3. PDO未开启错误提示,无法排查问题
初始化PDO时添加错误模式配置,出现SQL错误时直接抛出异常,方便定位问题:
$connection = new PDO('mysql:host=localhost;dbname=netland', $user, $pass); // 新增以下配置 $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
4. 冗余代码及执行状态判断缺失
UPDATE语句执行后不需要调用fetchAll(),该方法是用来获取查询结果集的,更新操作仅需要判断执行状态即可:
// 去掉这行冗余代码 // $updated_array = $stmt->fetchAll(); // 可以添加执行成功的判断 if ($stmt->rowCount() > 0) { echo "更新成功"; // 可选:更新成功后刷新页面拉取最新数据 header("Refresh:0"); }
额外优化:修正表单action错误
原代码中action="<?php $_PHP_SELF ?>"写法错误,$_PHP_SELF不是合法变量,且没有输出逻辑,要么直接省略action属性(默认提交到当前页),要么修正为:
action="<?= $_SERVER['PHP_SELF'] . '?id=' . $array_id ?>"
内容的提问来源于stack exchange,提问作者Lar
相关产品推荐
相关产品推荐

