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

如何通过HTML按钮导入SQL/CSV数据库文件?上传失效问题排查

SQL文件导入失败的问题修复方案

原代码存在的核心问题

  • 表单未添加enctype="multipart/form-data"属性,导致服务器无法接收上传的文件
  • 使用$_POST['data']获取上传文件,文件上传数据应从$_FILES变量读取,$_POST仅能获取文件名,无法访问实际文件内容
  • 缺少文件上传合法性校验(如上传错误、文件类型检查)
  • 错误信息输出不完整,无法定位SQL执行失败的具体原因
  • 未清理mysqli_multi_query产生的结果集,可能导致后续数据库操作异常

修正后的完整代码

<?php
require "../database.php";

if(isset($_POST['submit'])) {
    // 检查文件是否上传成功
    if ($_FILES['data']['error'] !== UPLOAD_ERR_OK) {
        echo "文件上传错误,错误码:" . $_FILES['data']['error'];
        exit;
    }

    // 验证文件类型为SQL
    $file_ext = pathinfo($_FILES['data']['name'], PATHINFO_EXTENSION);
    if (strtolower($file_ext) !== 'sql') {
        echo "仅支持上传SQL格式文件";
        exit;
    }

    $tmp_file = $_FILES['data']['tmp_name'];

    // 读取SQL文件内容
    $sql = file_get_contents($tmp_file);
    if ($sql === false) {
        echo "无法读取上传的文件";
        exit;
    }

    // 执行SQL语句
    if (mysqli_multi_query($conn, $sql)) {
        // 清理所有结果集,避免残留导致后续错误
        do {
            // 获取当前结果集(如果有)
            if ($result = mysqli_store_result($conn)) {
                mysqli_free_result($result);
            }
        } while (mysqli_next_result($conn));
        
        echo "SQL文件导入成功";
    } else {
        echo "导入SQL文件失败:" . mysqli_error($conn);
    }

    mysqli_close($conn);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Import Database</title>
</head>
<body>
    <?php include '../navigation.php';?>

    <div class="container-lg">
    <!-- 新增enctype属性,支持文件上传 -->
    <form action="import.php" method="post" enctype="multipart/form-data">
        <input type="file" class="form-control mt-5" name="data">
        <button type="submit" class="btn btn-success" name="submit">Import Database</button>
    </form>
    </div>

</body>
</html>

关键修改说明

  1. 表单属性补充:在<form>标签中添加enctype="multipart/form-data",这是文件上传表单的必填属性,确保服务器能正确解析上传的文件数据。
  2. 文件获取方式修正:通过$_FILES['data']['tmp_name']获取上传文件的临时存储路径,这是服务器端访问上传文件的唯一有效路径。
  3. 上传校验增强:增加了上传错误检查、文件格式验证,避免非法文件或上传失败的情况继续执行后续逻辑。
  4. 错误信息完善:使用mysqli_error($conn)输出具体的MySQL错误信息,方便快速定位SQL语句执行失败的原因。
  5. 结果集清理:通过循环调用mysqli_next_result($conn)和mysqli_free_result($result),清理mysqli_multi_query产生的所有结果集,防止残留结果影响后续数据库操作。

内容的提问来源于stack exchange,提问作者REYES MARK M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:23:26