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

如何通过HTML表单上传CSV文件并使用mysqli_query实现MySQL数据导入?

如何通过HTML表单上传CSV文件并使用mysqli_query实现MySQL数据导入?

我明白你的困扰——你已经找到了关于LOAD DATA LOCAL INFILE的资料,但卡在了HTML表单和PHP上传逻辑的衔接上,现有代码没效果还没报错。咱们一步步拆解问题,先看看你代码里的关键漏洞:

你的代码存在的核心问题

  1. 提交按钮缺少name属性:你的<input type="submit">没有设置name="submit",导致isset($_POST['submit'])永远为false,导入逻辑根本没被触发!
  2. 错误使用文件名而非服务器临时路径:你用了$_FILES["fileupload"]["name"],这只是用户本地的文件名,服务器上实际存储上传文件的临时路径是$_FILES["fileupload"]["tmp_name"],LOAD DATA需要读取服务器能访问的真实文件路径。
  3. SQL语句语法错误:直接把变量拼进SQL时没给文件名加引号,会导致MySQL语法报错,还存在注入风险(哪怕是自己用,规范写法也很重要)。
  4. 缺少错误检查机制:既没判断文件是否上传成功,也没捕获MySQL执行的错误,导致你看不到问题出在哪。

解决你的两个核心疑问

1. 如何正确获取$_FILES?

文件上传后,PHP会把上传信息存在$_FILES超全局变量里,你需要关注这几个关键字段:

  • $_FILES["fileupload"]["tmp_name"]:服务器上临时存储文件的真实路径(这是给LOAD DATA用的核心值)
  • $_FILES["fileupload"]["error"]:上传错误码,UPLOAD_ERR_OK表示上传完全成功
  • $_FILES["fileupload"]["name"]:用户本地的文件名(仅用来做提示,不能直接给MySQL用)

2. 如何触发$import_csv逻辑?

只要给提交按钮加上name="submit",当用户点击上传时,表单提交后$_POST['submit']就会存在,你的导入代码块就会自动执行。

修改后的完整可运行代码

<?php
// 仅在表单提交时执行导入逻辑
if( isset($_POST['submit']) ) {
    // 建立数据库连接(建议把连接逻辑抽离,避免重复连接)
    $connect = mysqli_connect("DB_HOST","DB_USER","DB_PASSWORD","DB_NAME");
    // 检查连接是否成功
    if (!$connect) {
        die("数据库连接失败: " . mysqli_connect_error());
    }

    // 检查文件是否上传成功
    if ($_FILES["fileupload"]["error"] !== UPLOAD_ERR_OK) {
        die("文件上传出错: 错误码 " . $_FILES["fileupload"]["error"]);
    }

    // 获取服务器临时文件路径,并转义避免SQL语法问题
    $temp_file = $_FILES["fileupload"]["tmp_name"];
    $escaped_temp_file = mysqli_real_escape_string($connect, $temp_file);

    // 构造并执行LOAD DATA语句
    $import_sql = "LOAD DATA LOCAL INFILE '$escaped_temp_file' 
                   INTO TABLE table_name 
                   FIELDS TERMINATED BY ',' 
                   IGNORE 1 LINES";
    $import_csv = mysqli_query($connect, $import_sql);

    // 反馈执行结果
    if ($import_csv) {
        echo "数据导入成功!";
    } else {
        echo "导入失败: " . mysqli_error($connect);
    }

    // 关闭数据库连接
    mysqli_close($connect);
}
?>

<form action="" method="post" enctype="multipart/form-data">
  <input type="file" name="fileupload" accept=".csv" required>
  <!-- 给提交按钮添加name属性,触发PHP逻辑 -->
  <input type="submit" name="submit" value="Upload">
</form>

额外注意事项

  • 确保MySQL允许LOCAL INFILE:部分环境默认禁用该功能,你可以在连接时添加开启参数:
    $connect = mysqli_init();
    mysqli_options($connect, MYSQLI_OPT_LOCAL_INFILE, true);
    mysqli_real_connect($connect, "DB_HOST","DB_USER","DB_PASSWORD","DB_NAME");
    
  • 临时文件权限:如果遇到权限问题,可以把上传文件移动到服务器明确目录(比如./uploads/),再用该路径执行LOAD DATA,记得给目录设置可读权限。

备注:内容来源于stack exchange,提问作者user5853892

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:03:00