PHP实现文件上传到文件夹正常但数据库未更新问题求助
问题修复方案
核心错误原因
你的代码存在最直接的逻辑错误:SQL执行后的判断条件写错了。
你定义了$result_insert = mysqli_query($conn,$insert);接收SQL执行结果,但判断的时候用的是if($insert),$insert是你写的SQL字符串,只要不为空就永远返回真,所以哪怕SQL执行失败,你也会收到上传成功的提示,自然看不到数据库相关的错误。
其他常见导致插入失败的原因
- 数据库连接异常,你没有加连接成功的校验逻辑
- 你的SQL语句因为参数里有单引号等特殊字符出现语法错误,你没有加SQL执行错误的打印逻辑
- 传入的参数和数据库表字段类型不匹配,比如
date字段传入的格式不符合MySQL要求,lesson_no是数字类型但你传入了非数字内容 - 字段名拼写错误,和实际表结构里的字段名不匹配
修复后的代码
<?php $host = "localhost"; $dbUsername = "root"; $dbPassword = ""; $dbName = "abc_school"; // 创建连接并校验 $conn = mysqli_connect($host, $dbUsername, $dbPassword, $dbName); if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); } $targetDir = "uploads/"; // 对所有传入参数做转义,避免SQL注入和语法错误 $lessonNo = intval($_POST['lno']); // 假设是数字类型,强制转成整数 $lessonName = mysqli_real_escape_string($conn, $_POST['lname']); $description = mysqli_real_escape_string($conn, $_POST['ldescription']); $date = mysqli_real_escape_string($conn, $_POST['ldate']); $fileName = mysqli_real_escape_string($conn, $_FILES['lfile']['name']); $targetFilePath = $targetDir . $fileName; $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION); if(isset($_POST["upload"]) && !empty($_FILES['lfile']['name'])){ $allowTypes = array('jpg','png','jpeg','gif','pdf'); if(in_array($fileType, $allowTypes)){ if(move_uploaded_file($_FILES['lfile']['tmp_name'], $targetFilePath)){ $insert = "INSERT INTO lessons (lesson_no, name, description, date, file) VALUES ($lessonNo, '$lessonName', '$description', '$date', '$fileName');"; $result_insert = mysqli_query($conn,$insert); // 这里判断执行结果,而不是SQL字符串 if($result_insert){ $statusMsg = "文件".basename($_FILES['lfile']['name']). "上传成功"; } else{ // 打印SQL执行错误,方便定位问题 $statusMsg = "数据库插入失败: " . mysqli_error($conn); } } else{ $statusMsg = "文件上传出错,请重试"; } } else{ $statusMsg = "仅支持上传JPG、JPEG、PNG、GIF、PDF格式的文件"; } } else{ $statusMsg = "请选择要上传的文件"; } echo $statusMsg; ?>
额外优化建议
后续可以改用参数化查询(预处理语句)来替代字符串拼接SQL,彻底避免SQL注入风险,也不用手动处理特殊字符转义的问题。
内容的提问来源于stack exchange,提问作者Tashini Somarathne
相关产品推荐
相关产品推荐

