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

LOAD DATA LOCAL INFILE导入CSV文件服务器端返回空数组怎么办

排查解决步骤
  • 第一步:检查MySQL local_infile 配置与PHP连接参数
    服务器MySQL默认会关闭本地文件加载权限,先执行SQL查询配置:
    SHOW GLOBAL VARIABLES LIKE 'local_infile';
    
    如果结果为OFF,执行开启命令:
    SET GLOBAL local_infile = 1;
    
    同时要确认你的PDO连接参数里开启了本地文件加载权限,连接时需要添加参数:
    $con = new PDO($dsn, $user, $pass, [
        PDO::MYSQL_ATTR_LOCAL_INFILE => true,
        // 其他原有参数
    ]);
    
    如果配置后仍不生效,检查php.ini中pdo_mysql.allow_local_infile是否设置为On。
  • 第二步:验证CSV文件的路径与权限
    你代码中使用的是相对路径customers.csv,先确认:
    1. 该文件确实存放在PHP代码执行的当前工作目录下,可输出realpath("customers.csv")确认路径是否正确
    2. 运行PHP进程的用户(常见为www-data、apache、nginx用户)拥有该文件的读取权限,可补充is_readable("customers.csv")判断可读性,不要只判断file_exists,也可以临时执行chmod a+r customers.csv授予全局读权限测试是否为权限问题。
  • 第三步:调整换行符匹配规则
    你当前配置的是LINES TERMINATED BY '\n',如果CSV文件是Windows环境生成的,默认换行符为\r\n,Linux服务器无法正常识别,可修改为:
    LINES TERMINATED BY '\r\n'
    
    如果CSV存在表头行,还要补充IGNORE 1 ROWS忽略表头,避免表头作为数据行插入异常。
  • 第四步:捕获执行错误与警告
    你现有代码没有捕获执行过程中的错误和警告,可在LOAD DATA语句执行完成后,执行SQL查询警告信息:
    SHOW WARNINGS;
    
    同时查看PHP错误日志、MySQL错误日志,确认是否存在文件读取失败、权限不足、字段不匹配等报错。
  • 第五步:替换临时表测试
    可先将临时表替换为普通物理表测试导入效果,排除临时表生命周期、连接复用导致的临时表失效问题。
  • 第六步:验证文件编码
    确认CSV文件编码和数据库表编码一致,若CSV为GBK/GB2312编码,数据库为UTF-8编码会导致插入失败,可将CSV转码为UTF-8后再测试。

内容的提问来源于stack exchange,提问作者Ahmad Mardini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:45:03