在许多场景下,我们需要将大量数据同时插入到MySQL数据库中,这时候单独插入每一条数据会非常耗时。因此,使用批量插入可以显著地提高数据插入的效率。本文将介绍如何使用PHP实现批量插入数据到MySQL数据库。
一、准备工作
在开始代码编写之前,我们需要进行几个准备工作:
1、确保你已经安装了PHP和MySQL,并且二者已经成功连接。
2、创建数据库和数据表。以下是我们将要使用的示例表结构:
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL DEFAULT '', `password` varchar(50) NOT NULL DEFAULT '', `email` varchar(100) DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3、准备数据。这里我们将使用一个包含100条记录的CSV文件,每条记录包括username、password和email三个字段:
username,password,email user1,123456,user1@example.com user2,123456,user2@example.com user3,123456,user3@example.com ...(省略) user98,123456,user98@example.com user99,123456,user99@example.com user100,123456,user100@example.com
二、逐行读取CSV文件并批量插入数据
接下来,我们将使用PHP逐行读取CSV文件中的数据,并批量插入到MySQL数据库中。
1.连接MySQL数据库
首先,我们需要连接到MySQL数据库。这里我们使用了PDO扩展,通过PDO对象连接到MySQL数据库:
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4'; $user = 'root'; $password = '123456'; try { $pdo = new PDO($dsn, $user, $password); } catch (PDOException $e) { die('Connection failed: ' . $e->getMessage()); }
2.打开CSV文件
接下来,我们需要打开CSV文件并逐行读取其中的数据。这里我们使用了fopen函数打开CSV文件,并使用fgetcsv函数逐行读取其中的数据:
$file = 'test.csv'; if (($handle = fopen($file, 'r')) !== false) { while (($data = fgetcsv($handle)) !== false) { // TODO: 批量插入数据 } fclose($handle); } else { die('Cannot open file'); }
3.批量插入数据
接下来,我们需要将逐行读取到的数据批量插入到MySQL数据库中。这里我们使用了PDO的预处理语句,通过bindParam方法绑定变量并循环执行execute方法实现批量插入:
$sql = 'INSERT INTO `user` (`username`, `password`, `email`, `created_at`) VALUES (:username, :password, :email, NOW())'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->bindParam(':email', $email); $count = 0; foreach ($data as $row) { list($username, $password, $email) = $row; if ($stmt->execute()) { $count++; } } echo 'Total inserted: ' . $count;
完整代码
以下是完整的示例代码:
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4'; $user = 'root'; $password = '123456'; try { $pdo = new PDO($dsn, $user, $password); } catch (PDOException $e) { die('Connection failed: ' . $e->getMessage()); } $file = 'test.csv'; if (($handle = fopen($file, 'r')) !== false) { $sql = 'INSERT INTO `user` (`username`, `password`, `email`, `created_at`) VALUES (:username, :password, :email, NOW())'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->bindParam(':email', $email); $count = 0; while (($data = fgetcsv($handle)) !== false) { list($username, $password, $email) = $data; if ($stmt->execute()) { $count++; } } fclose($handle); echo 'Total inserted: ' . $count; } else { die('Cannot open file'); }
三、总结
本文介绍了如何使用PHP实现批量插入数据到MySQL数据库。我们使用了PDO扩展连接到MySQL数据库,并逐行读取CSV文件中的数据,然后通过PDO的预处理语句实现批量插入。通过本文的学习,相信您已经掌握了如何高效地批量插入数据到MySQL数据库。