一、前言
針對數據插入操作,通常我們使用 SQL 語句在 MySQL 數據庫中執行 INSERT INTO 語句,實現數據插入。對於單條數據插入,我們通常使用 PHP 的 mysqli 或 PDO 等擴展進行操作。但如果需要一次性向數據庫插入多條數據時,循環多次插入會導致性能問題,這時我們可以使用PHP的 array_chunk 函數和 mysqli 或 PDO 的批量插入操作完成對大量數據的快速插入。
二、使用mysqli擴展批量插入數據
使用mysqli擴展進行批量插入的主要步驟:
- 創建mysqli對象;
- 準備要插入的數據,並使用array_chunk函數按照指定大小進行拆分;
- 使用beginTransaction函數開始事務;
- 循環插入數據,使用prepare函數,綁定參數,執行處理執行語句;
- 使用commit函數提交事務;
- 關閉連接。
<?php
// 創建mysqli對象
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 要插入的數據
$data = array(
array('name1', 'age1', 'address1'),
array('name2', 'age2', 'address2'),
array('name3', 'age3', 'address3'),
//...
);
// 拆分數據
$data_chunk = array_chunk($data, 1000);
// 開啟事務
$mysqli->begin_transaction();
// 插入數據
foreach ($data_chunk as $chunk) {
$stmt = $mysqli->prepare("INSERT INTO `table`(`name`, `age`, `address`) VALUES (?, ?, ?)");
foreach ($chunk as $row) {
$stmt->bind_param('sss', $row[0], $row[1], $row[2]);
$stmt->execute();
}
$stmt->close();
}
// 提交事務
$mysqli->commit();
// 關閉連接
$mysqli->close();
以上是使用mysqli擴展進行批量插入數據的示例代碼。
三、使用PDO擴展批量插入數據
使用PDO擴展進行批量插入的主要步驟:
- 創建PDO對象;
- 設置錯誤模式為異常模式;
- 準備要插入的數據,並使用array_chunk函數按照指定大小進行拆分;
- 使用beginTransaction函數開始事務;
- 循環插入數據,使用prepare函數,綁定參數,執行處理執行語句;
- 使用commit函數提交事務;
- 關閉連接。
<?php
// 創建PDO對象
$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
// 設置錯誤模式為異常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 要插入的數據
$data = array(
array('name1', 'age1', 'address1'),
array('name2', 'age2', 'address2'),
array('name3', 'age3', 'address3'),
//...
);
// 拆分數據
$data_chunk = array_chunk($data, 1000);
// 開啟事務
$pdo->beginTransaction();
// 插入數據
foreach ($data_chunk as $chunk) {
$stmt = $pdo->prepare("INSERT INTO `table`(`name`, `age`, `address`) VALUES (?, ?, ?)");
foreach ($chunk as $row) {
$stmt->bindParam(1, $row[0]);
$stmt->bindParam(2, $row[1]);
$stmt->bindParam(3, $row[2]);
$stmt->execute();
}
}
// 提交事務
$pdo->commit();
// 關閉連接
$pdo = null;
以上是使用PDO擴展進行批量插入數據的示例代碼。
四、結語
以上是針對如何使用PHP擴展實現MySQL批量插入多條數據的介紹。在線上系統中操作大量數據時,儘可能使用批量插入的方式,是提高性能的一個重要措施。同時,需要注意參數綁定和SQL注入等安全問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/157765.html