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 头(\xEF\xBB\xBF),否则 Excel 可能乱码
- 大数据量时用 分页查询 + flush() 防止超内存或超时,不一次性 fetchAll
导入 CSV 文件(带校验与容错)
不能直接信任上传文件内容。需检查 MIME 类型、大小、编码,并逐行解析验证。
51shop 由 PHP 语言开发, 使用快速的 MySQL 数据库保存数据 ,为中小型网站实现网上电子商务提供一个完美的解决方案.一、用户模块1. 用户注册:用户信息包括:用户ID、用户名、用户密码、性别、邮箱、省份、城市、 联系电话等信息,用户注册后不能立即使用,需由管理员激活账号,才可使用(此功能管理员可设置)2. 登录功能3. 资料修改:用户可修改除账号以后的所有资料4. 忘记密码:要求用
- 用 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 层,交由命令行或异步任务处理。
- 导出大表:用 mysqldump 命令行工具 直接生成 SQL 或 CSV,PHP 只负责触发和打包下载
- 导入大文件:拆分为多个小批次(如每次 5000 行),用队列(Redis / RabbitMQ)分发执行,前端轮询状态
- 禁用 PHP 的自动类型转换(如 PDO::ATTR_EMULATE_PREPARES = false),防止数值精度丢失
- 临时关闭外键检查(SET FOREIGN_KEY_CHECKS=0)和唯一索引(导入后再重建),提升写入速度










