原生PHP如何处理大量数据的导入和导出?
一、数据处理的基本概念
首先,我们要明白“大量数据的导入和导出”是什么意思。
- 数据导入:就是把很多数据放到我们的系统中。比如,你有一个包含学生信息的Excel文件,你想把这些学生信息放到你的数据库中。
- 数据导出:就是把系统中的数据拿出来,保存到一个文件里。比如,你想把数据库中的学生信息拿出来,保存到一个Excel文件中。
二、原生PHP处理数据导入导出的方法
数据导入:
- 使用
fgetcsv函数读取CSV文件中的数据。 - 使用PDO或MySQLi扩展将数据插入到数据库中。底层原理:PHP会一行一行地读取CSV文件中的内容,然后把每一行的内容插入到数据库的表中。
- 使用
数据导出:
- 从数据库中查询数据。
- 使用
fputcsv函数将数据写入CSV文件。 - 提供文件下载。底层原理:PHP会从数据库中查询出数据,然后把这些数据按照CSV的格式写入到一个文件中。最后,提供这个文件给用户下载。
三、实例代码
- 数据导入
假设我们有一个students.csv文件,内容如下:
姓名,年龄,性别 小明,10,男 小红,11,女我们要把这些数据导入到students表中。
<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password'); // 连接数据库 if (($handle = fopen("students.csv", "r")) !== FALSE) { fgetcsv($handle, 1000, ","); // 跳过标题行 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $name = $data[0]; $age = $data[1]; $gender = $data[2]; $stmt = $pdo->prepare("INSERT INTO students (name, age, gender) VALUES (?, ?, ?)"); $stmt->execute([$name, $age, $gender]); } fclose($handle); } ?>- 数据导出
假设我们要从students表中导出所有数据到exported_students.csv文件。
<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password'); // 连接数据库 $stmt = $pdo->query("SELECT * FROM students"); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); $handle = fopen('exported_students.csv', 'w'); fputcsv($handle, ['姓名', '年龄', '性别']); // 写入标题行 foreach ($results as $row) { fputcsv($handle, [$row['name'], $row['age'], $row['gender']]); } fclose($handle); // 提供文件下载 header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="exported_students.csv"'); readfile('exported_students.csv'); ?>注意:这只是一个简单的示例,实际应用中可能需要处理更多的细节和异常情况。
