在 PHP 中实现上传 Excel 文件并将其数据导入到 MySQL 数据库,通常需要使用 PHP 的文件上传功能和第三方库(如 PhpSpreadsheet
)来解析 Excel 文件。以下是完整的实现步骤:
1. 环境准备
安装 PhpSpreadsheet
使用 Composer 安装 PhpSpreadsheet 库:composer require phpoffice/phpspreadsheet
创建数据库表
假设我们要将 Excel 数据导入到users
表中,表结构如下:CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, age INT);
2. 前端:文件上传表单
创建一个 HTML 文件上传表单:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>上传 Excel 文件</title></head><body> <form action="upload.php" method="post" enctype="multipart/form-data"> <label for="excel-file">选择 Excel 文件:</label> <input type="file" name="excel-file" id="excel-file" accept=".xls, .xlsx"> <button type="submit">上传并导入</button> </form></body></html>
3. 后端:处理文件上传并导入数据
创建 upload.php
文件,处理文件上传和 Excel 数据导入。
<?phprequire 'vendor/autoload.php'; // 引入 Composer 自动加载文件use PhpOffice\PhpSpreadsheet\IOFactory;use PhpOffice\PhpSpreadsheet\Spreadsheet;// 数据库配置$host = 'localhost';$dbname = 'your_database';$username = 'your_username';$password = 'your_password';try { // 连接数据库 $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 检查文件是否上传成功 if (isset($_FILES['excel-file']) && $_FILES['excel-file']['error'] === UPLOAD_ERR_OK) { $fileTmpPath = $_FILES['excel-file']['tmp_name']; // 临时文件路径 $fileName = $_FILES['excel-file']['name']; // 文件名 // 加载 Excel 文件 $spreadsheet = IOFactory::load($fileTmpPath); $worksheet = $spreadsheet->getActiveSheet(); // 遍历每一行数据(从第二行开始,假设第一行是表头) foreach ($worksheet->getRowIterator(2) as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $data = []; foreach ($cellIterator as $cell) { $data[] = $cell->getValue(); // 获取单元格数据 } // 假设 Excel 文件列顺序为:name, email, age $name = $data[0]; $email = $data[1]; $age = $data[2]; // 插入数据库 $stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (:name, :email, :age)"); $stmt->execute([ ':name' => $name, ':email' => $email, ':age' => $age, ]); } echo "数据导入成功!"; } else { echo "文件上传失败!"; }} catch (Exception $e) { echo "发生错误:" . $e->getMessage();}
4. 运行流程
用户通过前端表单上传 Excel 文件。
后端接收文件并使用 PhpSpreadsheet 解析 Excel 数据。
将解析后的数据逐行插入到 MySQL 数据库中。
5. 示例 Excel 文件格式
假设 Excel 文件内容如下:
name | age | |
---|---|---|
Alice | alice@example.com | 25 |
Bob | bob@example.com | 30 |
Charlie | charlie@example.com | 22 |
6. 注意事项
文件类型验证
确保上传的文件是 Excel 文件(.xls
或.xlsx
)。$allowedTypes = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];if (!in_array($_FILES['excel-file']['type'], $allowedTypes)) { die("仅支持上传 Excel 文件!");}
数据验证
在插入数据库之前,验证数据的合法性(如邮箱格式、年龄是否为数字等)。性能优化
如果数据量较大,可以使用批量插入的方式提高性能。错误处理
捕获并处理可能出现的异常(如文件解析错误、数据库插入失败等)。
通过以上步骤,你可以实现一个简单的 PHP 上传 Excel 文件并导入数据到 MySQL 数据库的功能。
本文关键词: PHP 上传 Excel 文件 导入 数据
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。