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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:01