sql_insertq_multi

La fonction sql_insertq_multi() permet d’insérer en une opération plusieurs éléments au schéma identique dans une table de la base de données. Lorsque les portages le permettent, ils utilisent d’ailleurs une seule requête SQL pour réaliser l’ajout. Plus précisément une requête par lot de 100 éléments pour éviter des débordements de mémoire.

La fonction a les mêmes 5 paramètres que sql_insertq() mais le second paramètre est un tableau de tableau de couples et non les couples directement :

  1. $table est le nom de la table SQL,
  2. $couples est un tableau de tableau associatif nom / valeur,
  3. $desc,
  4. $serveur,
  5. $option.

Les colonnes utilisées doivent impérativement être les mêmes pour toutes les insertions. Elle s’utilise comme ceci :

$id = sql_insertq_multi('table', array(
	array('colonne' => 'valeur'),
	array('colonne' => 'valeur2'),
	array('colonne' => 'valeur3'),
);

Exemple

Les recherches effectuées via SPIP stockent dans une table spip_resultats quelques éléments utilisés comme cache, en prenant soin de l’appliquer sur la connexion SQL en court. $tab_couples contient l’ensemble des données à insérer :

// inserer les resultats dans la table de cache des resultats
if (count($points)){
	$tab_couples = array();
	foreach ($points as $id => $p){
		$tab_couples[] = array(
			'recherche' => $hash,
			'id' => $id,
			'points' => $p['score']
		);
	}
	sql_insertq_multi('spip_resultats', $tab_couples, array(), $serveur);
}

Le plugin « Polyhierarchie » l’utilise aussi pour insérer la liste des rubriques nouvellement liées à un objet donné :

$ins = array();
foreach($id_parents as $p){
	if ($p) {
		$ins[] = array(
			'id_parent' => $p, 
			'id_objet' => $id_objet, 
			'objet' => $objet);
	}
	if (count($ins)) {
		sql_insertq_multi("spip_rubriques_liens", $ins, "", $serveur);
	}

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, français