php实现excel导入数据库
PHP 实现 Excel 导入数据库的方法
使用 PHPExcel 或 PhpSpreadsheet 库
PHPExcel 是一个流行的 PHP 库,用于处理 Excel 文件。虽然 PHPExcel 已停止维护,但其继任者 PhpSpreadsheet 提供了类似的功能。以下步骤展示了如何使用 PhpSpreadsheet 导入 Excel 数据到数据库。
安装 PhpSpreadsheet 库:
composer require phpoffice/phpspreadsheet
示例代码:

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
// 数据库连接
$dbHost = 'localhost';
$dbUser = 'username';
$dbPass = 'password';
$dbName = 'database_name';
$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 读取 Excel 文件
$inputFileName = 'path/to/your/file.xlsx';
$spreadsheet = IOFactory::load($inputFileName);
$sheet = $spreadsheet->getActiveSheet();
// 遍历行
foreach ($sheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
$data = [];
foreach ($cellIterator as $cell) {
$data[] = $cell->getValue();
}
// 插入数据库
$sql = "INSERT INTO your_table (column1, column2, column3) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sss", $data[0], $data[1], $data[2]);
$stmt->execute();
}
$conn->close();
echo "Data imported successfully";
?>
使用 PHP 原生函数处理 CSV 文件
如果 Excel 文件可以保存为 CSV 格式,可以使用 PHP 原生函数处理。
示例代码:

<?php
// 数据库连接
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 打开 CSV 文件
if (($handle = fopen("path/to/your/file.csv", "r")) !== false) {
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
$sql = "INSERT INTO your_table (column1, column2, column3) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sss", $data[0], $data[1], $data[2]);
$stmt->execute();
}
fclose($handle);
}
$conn->close();
echo "Data imported successfully";
?>
使用第三方库 Box/Spout
Box/Spout 是一个轻量级的 PHP 库,专门用于读取和写入大型 Excel 文件。
安装 Box/Spout:
composer require box/spout
示例代码:
<?php
require 'vendor/autoload.php';
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
// 数据库连接
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$reader = ReaderEntityFactory::createXLSXReader();
$reader->open('path/to/your/file.xlsx');
foreach ($reader->getSheetIterator() as $sheet) {
foreach ($sheet->getRowIterator() as $row) {
$cells = $row->getCells();
$data = array_map(function($cell) {
return $cell->getValue();
}, $cells);
$sql = "INSERT INTO your_table (column1, column2, column3) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sss", $data[0], $data[1], $data[2]);
$stmt->execute();
}
}
$reader->close();
$conn->close();
echo "Data imported successfully";
?>
注意事项
- 确保文件路径正确,且 PHP 有权限读取文件。
- 处理大量数据时,考虑分批插入以避免内存问题。
- 验证和清理数据以防止 SQL 注入。
- 根据实际需求调整代码中的表名和列名。






