共計 2157 個字符,預計需要花費 6 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章將為大家詳細講解有關 mysql 中怎么使用 php 批量插入數據,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
假如說我有這樣一個表,我想往這個表里面插入大量數據:
CREATE TABLE IF NOT EXISTS `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 自增主鍵 ,
`name` varchar(255) NOT NULL default COMMENT 姓名 ,
`age` int(11) NOT NULL default 0 COMMENT 年齡 ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT= 用戶信息表
批量插入
方法一、使用 for 循環插入
在往 mysql 插入少量數據的時候,我們一般用 for 循環:
$arr = [
[
name = testname1 ,
age = 18,
],
[
name = testname2 ,
age = 19,
],
[
name = testname3 ,
age = 18,
],
];
$servername = localhost
$port = 3306;
$username = username
$password = password
$dbname = mytestdb
// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// 檢測連接
if ($conn- connect_error) {
die(connect failed: . $conn- connect_error);
}
$costBegin = microtime(true);
foreach($arr as $item) {
$sql = sprintf(INSERT INTO user_info (name, age) VALUES (%s , %d); , $item[name], (int)$item[age
if ($conn- query($sql) === TRUE) {
echo insert success
} else {
echo Error: . $sql . br . $conn- error;
}
}
$costEnd = microtime(true);
$cost = round($costEnd – $costBegin, 3);
var_dump($cost);
$conn- close();
假如說要批量插入大量數據,如果還用 for 循環的辦法插入是沒有問題的,只是時間會比較長。對比一下插入少量數據與插入大量數據,使用上面的 for 循環插入耗費的時間:條數時間 (單位:秒)。
方法二、使用 insert 語句合并插入
mysql 里面是可以使用 insert 語句進行合并插入的,比如:
INSERT INTO user_info (name, age) VALUES (name1 , 18), (name2 , 19); 表示一次插入兩條數據
$arr = [
[
name = testname1 ,
age = 18,
],
[
name = testname2 ,
age = 19,
],
[
name = testname3 ,
age = 18,
],
// 此處省略
……
……
];
$servername = localhost
$port = 3306;
$username = username
$password = password
$dbname = mytestdb
// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// 檢測連接
if ($conn- connect_error) {
die(connect failed: . $conn- connect_error);
}
$costBegin = microtime(true);
if (!empty($arr)) {
$sql = sprintf(INSERT INTO user_info (name, age) VALUES
foreach($arr as $item) {
$itemStr = (
$itemStr .= sprintf(%s , %d , $item[ name], (int)$item[age
$itemStr .= ),
$sql .= $itemStr;
}
// 去除最后一個逗號,并且加上結束分號
$sql = rtrim($sql, ,
$sql .=
if ($conn- query($sql) === TRUE) {
} else {
echo Error: . $sql .
. $conn- error;
}
}
$costEnd = microtime(true);
$cost = round($costEnd – $costBegin, 3);
var_dump($cost);
$conn- close();
下面看一下少量數據與大量數據的時間對比。從總體時間上,可以看出 insert 合并插入比剛才 for 循環插入節約了很多時間, 效果很明顯條數時間 (單位:秒)。
如果你覺得數組太大,想要減少 sql 錯誤的風險,也可以使用 array_chunk 將數組切成指定大小的塊,然后對每個塊進行 insert 合并插入。
關于 mysql 中怎么使用 php 批量插入數據就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
向 AI 問一下細節