Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment insérer plusieurs lignes à partir d'un tableau à l'aide du framework CodeIgniter ?

Assemblage d'un INSERT instruction avec plusieurs lignes est beaucoup plus rapide dans MySQL qu'un INSERT instruction par ligne.

Cela dit, il semble que vous rencontriez des problèmes de gestion des chaînes en PHP, ce qui est en réalité un problème d'algorithme et non de langage. Fondamentalement, lorsque vous travaillez avec de grandes chaînes, vous souhaitez minimiser les copies inutiles. Cela signifie principalement que vous voulez éviter la concaténation. Le moyen le plus rapide et le plus économe en mémoire de créer une grande chaîne, par exemple pour insérer des centaines de lignes à la fois, consiste à tirer parti de la fonction implode() fonction et affectation de tableau.

$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 ne copiez pas et ne recopiez pas l'instruction SQL que vous avez assemblée jusqu'à présent avec chaque concaténation; à la place, PHP le fait une fois dans le implode() déclaration. C'est un gros gagner.

Si vous avez beaucoup de colonnes à assembler et qu'une ou plusieurs sont très longues, vous pouvez également créer une boucle interne pour faire la même chose et utiliser implode() pour affecter la clause values ​​au tableau externe.