php实现excel导入数据库
PHP实现Excel导入数据库的方法
准备工作
确保服务器已安装PHPExcel库或PhpSpreadsheet(PHPExcel的后续版本)。可通过Composer安装:
composer require phpoffice/phpspreadsheet
读取Excel文件
使用PhpSpreadsheet加载Excel文件并读取数据:
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
$inputFileName = 'path/to/your/file.xlsx';
$spreadsheet = IOFactory::load($inputFileName);
$worksheet = $spreadsheet->getActiveSheet();
处理数据
获取工作表数据并转换为数组:
$rows = [];
foreach ($worksheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
$rowData = [];
foreach ($cellIterator as $cell) {
$rowData[] = $cell->getValue();
}
$rows[] = $rowData;
}
数据库连接
建立数据库连接(以MySQL为例):
$dbHost = 'localhost';
$dbUser = 'username';
$dbPass = 'password';
$dbName = 'database';
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
数据导入
遍历数据并插入数据库:
// 假设第一行是标题,从第二行开始导入
for ($i = 1; $i < count($rows); $i++) {
$sql = "INSERT INTO your_table (column1, column2, column3)
VALUES ('" . $conn->real_escape_string($rows[$i][0]) . "',
'" . $conn->real_escape_string($rows[$i][1]) . "',
'" . $conn->real_escape_string($rows[$i][2]) . "')";
if (!$conn->query($sql)) {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
注意事项
- 文件上传需添加表单验证和安全处理
- 大数据量导入建议分批次处理
- 考虑使用事务确保数据完整性
- 添加适当的错误处理和日志记录
替代方案
对于简单需求,可考虑使用CSV格式替代Excel:
$file = fopen('data.csv', 'r');
while (($line = fgetcsv($file)) !== false) {
// 处理CSV行数据
}
fclose($file);
性能优化
- 使用预处理语句(Prepared Statements)
- 批量插入代替单条插入
- 关闭自动提交模式
- 考虑使用LOAD DATA INFILE(MySQL特有)







