在Web项目开发中,批量导入数据是常见的需求之一。ThinkPHP6提供了完善的文件上传机制,而MySQL本身具备强大的数据导入能力,尤其是LOAD DATA INFILE命令。本文将分步骤讲解如何结合两者,实现稳定高效的大数据量导入方案。
在正式开始前,需要确保以下条件:
我们首先创建一个上传文件的接口,供用户选择并上传需要导入的数据文件。
use think\facade\View;
use think\facade\Request;
public function uploadFile()
{
return View::fetch('upload_file');
}
通过表单上传文件后,我们需验证并保存上传的文件,以下代码示例展示了文件处理过程:
public function importData()
{
$file = Request::file('file');
$savePath = 'public/uploads/';
$info = $file->validate([
'size' => 2048000,
'ext' => 'csv,xls,xlsx'
])->move($savePath);
if ($info) {
$filename = $info->getSaveName();
$filePath = $savePath . $filename;
// 执行数据导入逻辑
} else {
// 上传失败处理逻辑
}
}
上传成功后,接下来是关键的导入环节。MySQL的LOAD DATA LOCAL INFILE可以快速读取文件并插入数据到表中。
use think\facade\Db;
public function importData()
{
// ...上传处理后得到路径和文件名
$filename = $info->getSaveName();
$filePath = $savePath . $filename;
$tableName = 'your_table_name'; // 替换为实际表名
$sql = "LOAD DATA LOCAL INFILE '{$filePath}' INTO TABLE `{$tableName}` FIELDS TERMINATED BY ','";
Db::connect()->execute($sql);
}
数据导入完成后,可根据业务需求进一步操作,例如记录日志、显示结果或执行后续的批量处理任务:
public function importData()
{
// ...前面步骤略
$sql = "LOAD DATA LOCAL INFILE '{$filePath}' INTO TABLE `{$tableName}` FIELDS TERMINATED BY ','";
Db::connect()->execute($sql);
// 可添加导入结果处理逻辑
// 可记录导入日志供后续追踪
}
通过以上几个步骤,我们可以在ThinkPHP6项目中高效实现MySQL大批量数据的导入操作。配合合理的错误处理与日志记录机制,能显著提升数据导入的稳定性与可维护性。该方案适合电商、数据管理系统、内容管理系统等对数据导入频率较高的场景。