在許多場景下,我們需要將大量數據同時插入到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資料庫。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/157688.html
微信掃一掃
支付寶掃一掃