编辑帖子功能故障报错:字段列表中不存在'trewfh'列
这个报错其实已经把核心问题说得很明确了——你在生成UPDATE SQL语句时,错误地把要更新的帖子内容trewfh当成了数据库表的字段名,而你的hw7_foru(推测是hw7_forum表)里根本不存在名为trewfh的字段。
从报错栈追踪能看到关键线索:
#1 C:\xampp\htdocs\Final\Forum\editpost.php(39): editpost(72, 'trewfh')
你调用editpost函数时,第二个参数是要更新的帖子内容trewfh,但你的函数实现里,错误地把这个内容值拼到了SQL的字段位置,而不是值的位置。
具体排查与修复步骤:
先确认生成的SQL语句:
打开editpost.php第55行附近,在调用mysqli_query之前,把生成的$sql变量打印出来(比如var_dump($sql); exit;),你会看到类似这样的错误SQL:UPDATE hw7_forum SET trewfh = 'xxx' WHERE post_id = 72这里明显把内容
trewfh当成了字段名,而不是字段的值。修正SQL拼接逻辑:
找到editpost函数的实现,确保你指定了正确的字段名(比如你的帖子内容字段可能叫content、post_content之类的),然后把用户输入的内容作为值传入。同时一定要用预处理语句,避免SQL注入风险。举个错误代码和修复后的对比:
❌ 错误的代码(混淆字段名和值):function editpost($post_id, $content) { global $conn; // 这里把$content当成了字段名,完全错误 $sql = "UPDATE hw7_forum SET $content = 'some_value' WHERE post_id = $post_id"; mysqli_query($conn, $sql); }✅ 修复后的代码(指定正确字段名+用预处理防注入):
function editpost($post_id, $content) { global $conn; // 替换成你实际的帖子内容字段名,比如post_content $sql = "UPDATE hw7_forum SET post_content = ? WHERE post_id = ?"; // 使用预处理语句,既解决错误又防止SQL注入 $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "si", $content, $post_id); mysqli_stmt_execute($stmt); // 记得处理执行结果 if(mysqli_stmt_affected_rows($stmt) > 0) { echo "帖子编辑成功"; } else { echo "编辑失败:" . mysqli_error($conn); } mysqli_stmt_close($stmt); }验证数据库表结构:
如果你不确定字段名,可以登录phpMyAdmin(或者用SQL命令)查看hw7_foru表的结构,确认存储帖子内容的字段名称,确保代码里的字段名和数据库一致。
内容的提问来源于stack exchange,提问作者broda

