Maison > développement back-end > tutoriel php > PHP implémente l'insertion par lots de données dans MySQL

PHP implémente l'insertion par lots de données dans MySQL

王林
Libérer: 2023-04-08 11:58:02
avant
4411 Les gens l'ont consulté

PHP implémente l'insertion par lots de données dans MySQL

Maintenant, il existe un tel tableau. Comment pouvons-nous insérer une grande quantité de données dans ce tableau ?

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='用户信息表';
Copier après la connexion

Insertion par lots

Méthode 1. Utiliser la boucle for pour insérer

Lors de l'insertion d'une petite quantité de données dans MySQL, nous utilisons généralement la boucle for

(Partage de tutoriel vidéo associé : tutoriel vidéo php)

$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();
Copier après la connexion

Si vous souhaitez insérer une grande quantité de données par lots, il n'y a pas de problème si vous utilisez également une boucle for pour insérer, mais cela prendra plus de temps. Comparez l'insertion d'une petite quantité de données avec l'insertion d'une grande quantité de données, le temps nécessaire à l'insertion à l'aide de la boucle for ci-dessus : Nombre d'éléments, temps (unité : secondes)

PHP implémente linsertion par lots de données dans MySQL

Méthode 2. Utilisez l'instruction insert pour fusionner Insert

Dans MySQL, vous pouvez utiliser l'instruction insert pour l'insertion par fusion, telle que

INSERT INTO user_info (name, age) VALUES (&#39;name1&#39;, 18), (&#39;name2&#39;, 19);表示一次插入两条数据

$arr = [ 
[
&#39;name&#39; => &#39;testname1&#39;,
&#39;age&#39; => 18,
],
[
&#39;name&#39; => &#39;testname2&#39;,
&#39;age&#39; => 19,
],
[
&#39;name&#39; => &#39;testname3&#39;,
&#39;age&#39; => 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 = &#39;( &#39;;
$itemStr .= sprintf("&#39;%s&#39;, %d", $item[&#39;name&#39;], (int)$item[&#39;age&#39;]);
$itemStr .= &#39;),&#39;;
$sql .= $itemStr;
}

// 去除最后一个逗号,并且加上结束分号
$sql = rtrim($sql, &#39;,&#39;);
$sql .= &#39;;&#39;;

if ($conn->query($sql) === TRUE) {
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}

$costEnd = microtime(true);
$cost = round($costEnd - $costBegin, 3);
var_dump($cost);

$conn->close();
Copier après la connexion

Jetons un coup d'œil à la comparaison temporelle entre une petite quantité de données et une grande quantité de données. D'après le temps global, on peut voir que l'insertion par fusion par insertion fait gagner beaucoup de temps par rapport à l'insertion de la boucle for à l'instant, et l'effet est évident Nombre d'éléments (unité : secondes)

PHP implémente linsertion par lots de données dans MySQL.

Si vous pensez que le tableau est trop grand, si vous souhaitez réduire le risque d'erreurs SQL, vous pouvez également utiliser array_chunk pour couper le tableau en blocs d'une taille spécifiée, puis fusionner et insérer chaque bloc. .

Articles et tutoriels connexes recommandés : Tutoriel php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal