Assemblage d'un INSERT
avec plusieurs lignes est beaucoup plus rapide dans MySQL qu'une seule instruction INSERT
par ligne.
Cela dit, il semble que vous rencontriez des problèmes de gestion des chaînes de caractères en PHP, ce qui est en fait un problème d'algorithme, et non de langage. Fondamentalement, lorsque vous travaillez avec de grandes chaînes de caractères, vous voulez minimiser les copies inutiles. Principalement, cela signifie que vous voulez éviter la concaténation. La manière la plus rapide et la plus efficace en termes de mémoire pour construire une grande chaîne de caractères, par exemple pour insérer des centaines de lignes en une seule fois, est de tirer profit de la fonction implode()
et l'affectation de tableaux.
$sql = array();
foreach( $data as $row ) {
$sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));
L'avantage de cette approche est que vous n'avez pas à copier et recopier l'instruction SQL que vous avez assemblé jusqu'à présent avec chaque concaténation ; à la place, PHP fait ceci une fois dans le implode()
déclaration. Il s'agit d'une grand gagner.
Si vous avez beaucoup de colonnes à assembler, et qu'une ou plusieurs d'entre elles sont très longues, vous pouvez également construire une boucle interne pour faire la même chose et utiliser la fonction implode()
pour affecter la clause values au tableau externe.
0 votes
J'ai donné la réponse à votre question sur l'insertion de rangs multiples de Codeigniter.
0 votes
@SomnathMuluk Merci, mais cela fait un moment que je n'ai pas eu à répondre à cette question :)...
0 votes
Je vous recommande d'utiliser la fonction insert_batch de CodeIgniter. Si vous utilisez une bibliothèque, essayez toujours de tirer parti de ses forces et de ses normes de codage.
0 votes
Je pense que l'insertion de lots est la meilleure façon de faire, voir le lien. stackoverflow.com/questions/27206178/codeigniter-insert-batch