mysqli编辑更新记录异常:提示更新成功但数据库无变更求助
兄弟,我来帮你捋捋为啥会出现更新提示弹了但数据库里的数据纹丝不动的问题。结合你贴的代码片段,这些是最可能的原因和解决办法:
1. 最核心的问题:你可能没执行实际的UPDATE语句
你贴的提交处理代码只写到$Treat = (int)($_POST...)就断了,看起来你压根没写更新数据库的SQL执行逻辑。如果只是从表单里拿了值,但没调用mysqli_query去执行UPDATE操作,数据库肯定不会变;但如果你的代码里不管三七二十一就输出“更新成功”的提示,自然就出现了虚假更新的情况。
正确的更新流程应该是这样的(补全你缺失的部分):
if(isset($_POST['submit'])) { // 获取表单提交的值 $id = (int)$_POST['tid']; $Treat = (int)$_POST['Treat']; // 假设你的表单字段名为Treat // 关键:执行UPDATE语句 $updateSql = "UPDATE a SET Treat = $Treat WHERE id = $id"; $updateResult = mysqli_query($db, $updateSql); // 一定要根据执行结果判断是否真的成功,别瞎弹提示 if($updateResult) { // 还可以用mysqli_affected_rows确认有没有真的修改到数据 if(mysqli_affected_rows($db) > 0) { echo "更新成功!"; } else { echo "没有找到匹配的记录,未执行更新"; } } else { // 打印错误信息,方便排查问题 echo "更新失败:" . mysqli_error($db); } }
2. 更新条件不匹配,导致UPDATE没命中记录
假设你已经写了UPDATE语句,但还是没效果,大概率是更新的条件不对:
- 你编辑时是从
$_GET['Edit']获取要修改的id,但提交时用的是$_POST['tid'],要确认这个tid有没有正确传递到表单里。比如表单里得有个隐藏字段把ID传过去:
<input type="hidden" name="tid" value="<?php echo $row['id']; ?>">
- 可以在执行UPDATE后用
mysqli_affected_rows($db)查看影响的行数,如果返回0,说明SQL语句执行了,但没有匹配到任何要更新的记录,那就要检查$id的值和数据库里的id是否对应。
3. 提示逻辑太草率,不管成功失败都弹“更新”
如果你的代码里是不管更新操作有没有真的执行成功,都直接输出“已更新”的提示,那也会造成虚假更新的错觉。一定要根据mysqli_query的返回结果,或者mysqli_affected_rows的数值来判断是否真的更新成功,再输出对应的提示。
额外提醒:别忽略SQL注入风险
虽然你用了(int)强制转换来避免注入,但更稳妥的做法是用预处理语句,既能彻底杜绝注入,还能避免因数据类型问题导致的更新失败:
if(isset($_POST['submit'])) { $id = (int)$_POST['tid']; $Treat = (int)$_POST['Treat']; // 预处理语句写法 $stmt = mysqli_prepare($db, "UPDATE a SET Treat = ? WHERE id = ?"); mysqli_stmt_bind_param($stmt, "ii", $Treat, $id); // "ii"表示两个整数类型的参数 mysqli_stmt_execute($stmt); if(mysqli_stmt_affected_rows($stmt) > 0) { echo "更新成功!"; } else { echo "未找到可更新的记录或更新失败"; } }
内容的提问来源于stack exchange,提问作者lrvanjan
相关产品推荐
相关产品推荐

