You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO操作SQL数据库无法保存/更新数据,请求排查解决

排查PDO操作数据库无法编辑数据的问题

我仔细梳理了你的代码,发现几个关键问题导致数据无法成功更新,逐个拆解说明:

1. 编辑ID的参数获取错误

在你的编辑处理代码里,你写了$bookID = $_GET['bookID'];,但看模态框的表单action是editbook.php?id=<?php echo $rec['bookID']; ?>——这里传递的参数名是id,不是bookID!

这会导致$bookID取不到有效值,UPDATE语句的WHERE bookID='$bookID'找不到对应记录,自然不会有数据更新。

修复方案:把获取ID的代码改成:

$bookID = $_GET['id'];

2. 下拉选择框(select)的value设置逻辑错误

你的模态框里select标签的写法存在问题:

<select class="form-control" name="txtStatus" value="<?php echo $rec['status']; ?>">
  <option name="New">New</option>
  ...
</select>
  • select标签本身不支持通过value属性设置选中项,需要给对应option添加selected属性
  • option标签的name属性无效,应该用value定义提交时传递的值

修复方案:修改select部分代码,根据当前记录的status标记对应option为选中:

<select class="form-control" name="txtStatus">
  <option value="New" <?php echo $rec['status'] == 'New' ? 'selected' : ''; ?>>New</option>
  <option value="Old" <?php echo $rec['status'] == 'Old' ? 'selected' : ''; ?>>Old</option>
  <option value="Damage" <?php echo $rec['status'] == 'Damage' ? 'selected' : ''; ?>>Damage</option>
  <option value="Archive" <?php echo $rec['status'] == 'Archive' ? 'selected' : ''; ?>>Archive</option>
  <option value="Lost" <?php echo $rec['status'] == 'Lost' ? 'selected' : ''; ?>>Lost</option>
</select>

这样既能正确显示当前状态,提交时也能传递正确的status值。

3. 模态框提交按钮标签不闭合

你模态框里的提交按钮写成了:

<button type="submit" name="edit" value="Save" class="btn btn-primary">Update</a>

这里用</a>闭合button标签,属于标签不匹配,可能导致表单提交行为异常。

修复方案:改成正确的闭合标签:

<button type="submit" name="edit" value="Save" class="btn btn-primary">Update</button>

4. 额外建议:避免SQL注入,使用PDO预处理语句

虽然这不是当前数据不更新的直接原因,但你的SQL语句直接拼接变量,存在严重的SQL注入风险。建议改成PDO预处理语句,更安全可靠:

// 替换原有的$sql和exec代码段
$sql = "UPDATE books SET isbn=?, title=?, author=?, publisher=?, copyright_year=?, status=? WHERE bookID=?";
$stmt = $db->prepare($sql);
// 绑定参数并执行
$stmt->execute([$isbn, $title, $author, $publisher, $copyright_year, $status, $bookID]);

$_SESSION['message'] = $stmt->rowCount() > 0 ? 'Book updated successfully' : 'No changes made or something went wrong';

用rowCount()可以更准确判断是否有记录被更新。

把这些问题修复后,你的编辑功能应该就能正常工作了。

内容的提问来源于stack exchange,提问作者CJ Pastor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:21:56