PHP insère les données par lots dans MySQL (exemple de code)

藏色散人
Libérer: 2023-04-08 11:48:01
avant
3599 Les gens l'ont consulté

PHP insère les données par lots dans MySQL (exemple de code)

Supposons que j'ai une telle table et que je souhaite insérer une grande quantité de données dans cette table

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

$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 aucun problème si vous utilisez également une boucle for pour l'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, en utilisant la boucle for ci-dessus pour insérer le temps nécessaire : nombre de fois (unité : secondes)

PHP insère les données par lots dans MySQL (exemple de code)

Méthode 2 : utilisez l'instruction insert pour fusionner et insérer

Dans MySQL, vous pouvez utiliser l'instruction insert pour fusionner et insérer, par exemple as

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 permet de gagner beaucoup de temps par rapport à l'insertion de la boucle for à l'instant, et l'effet est évident Nombre de fois (unité : secondes)

.

PHP insère les données par lots dans MySQL (exemple de code)

Si vous pensez que le tableau est trop grand et que vous souhaitez réduire le risque d'erreurs SQL, vous pouvez utilisez également array_chunk pour couper le tableau en morceaux d'une taille spécifiée, puis effectuez une insertion par fusion pour chaque bloc.

Pour plus de connaissances sur PHP, veuillez visiter le 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