php数据库导入导出核心是控制数据流向:导出为“库→格式→文件”,导入为“文件→解析→库”,关键在格式适配、内存控制与错误处理;csv用fputcsv/fgetcsv+响应头+bom,excel依赖phpspreadsheet;大数据需分页、分批、命令行或队列优化。

PHP 实现数据库数据的导入导出,核心在于控制数据流向:导出是“从数据库读取 → 转换格式 → 输出文件”,导入是“接收文件 → 解析内容 → 写入数据库”。关键不在语言本身,而在格式适配、内存控制和错误处理。
导出为 CSV(适合中小量数据)
CSV 简单通用,浏览器可直接下载,无需额外扩展。注意字段包裹、特殊字符转义和中文编码问题。
- 使用 fputcsv() 自动处理引号、逗号、换行等转义,避免手动拼接出错
- 输出前设置响应头:header(‘Content-Type: text/csv; charset=utf-8’); 和 header(‘Content-Disposition: attachment; filename=”data.csv”‘);
- 中文导出需在第一行写入 BOM 头(xEFxBBxBF),否则 Excel 可能乱码
- 大数据量时用 分页查询 + flush() 防止超内存或超时,不一次性 fetchAll
导入 CSV 文件(带校验与容错)
不能直接信任上传文件内容。需检查 MIME 类型、大小、编码,并逐行解析验证。
- 用 fgetcsv() 逐行读取,不 file_get_contents 全加载,节省内存
- 首行通常为字段名,需映射到数据库字段;跳过空行、注释行(如以 # 开头)
- 对关键字段(如邮箱、手机号、日期)做基础校验,非法数据记录日志并跳过,不中断整个导入
- 使用事务(BEGIN/COMMIT/ROLLBACK)包裹批量插入,失败时回滚,保持数据一致
支持 Excel(.xlsx)需借助第三方库
PHP 原生不支持 Excel 解析。推荐使用 PhpSpreadsheet(phpoffice/phpspreadsheet),轻量且活跃维护。
立即学习“PHP免费学习笔记(深入)”;
- 导出:创建 Spreadsheet 对象,写入数据,用 Xlsx writer 输出二进制流,响应头设为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- 导入:Reader 自动识别格式,支持 .xls/.xlsx/.csv,读取时指定工作表和范围,避免全表加载
- 注意内存限制——大 Excel 文件建议用 chunk reading(按行迭代),而非 load 全部到内存
- 单元格值类型(日期、数字、字符串)需用 getCalculatedValue() 或 getFormattedValue() 区分处理
大容量数据导入导出的优化策略
当单表超 10 万行,常规 PHP 流程易超时或爆内存。应绕过 Web 层,交由命令行或异步任务处理。