在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大批量數據的導入操作。配合合理的錯誤處理與日誌記錄機制,能顯著提升數據導入的穩定性與可維護性。該方案適合電商、數據管理系統、內容管理系統等對數據導入頻率較高的場景。