2010-11-12 12 views
4

S'il vous plaît se référer à cette question que je posais
Codeigniter Insert Multiple Rows in SQLCodeigniter Insérer tableau multidimensionnels lignes dans MySQL

Pour retraiter

<tr> 
<td><input type="text" name="user[0][name]" value=""></td> 
<td><input type="text" name="user[0][address]" value=""><br></td> 
<td><input type="text" name="user[0][age]" value=""></td> 
<td><input type="text" name="user[0][email]" value=""></td> 
</tr> 
<tr> 
<td><input type="text" name="user[1][name]" value=""></td> 
<td><input type="text" name="user[1][address]" value=""><br></td> 
<td><input type="text" name="user[1][age]" value=""></td> 
<td><input type="text" name="user[1][email]" value=""></td> 
</tr> 
.......... 

peut être inséré dans MySQL comme ce

foreach($_POST['user'] as $user) 
{ 
    $this->db->insert('mytable', $user); 
} 

Ce résultat dans plusieurs requêtes MySQL. Est-il possible d'optimiser davantage, de sorte que l'insert se produit dans une requête

Quelque chose comme ça

insert multiple rows via a php array into mysql

mais en profitant de codeigniters syntaxe plus simple. Merci

+4

Sauf si vous avez des centaines de milliers d'enregistrements à INSERT, vous ne gagnerez rien et le goulot d'étranglement réel sont les indices de table, et non la ronde -trip coût de l'exécution de la requête plusieurs fois. –

Répondre

0

CodeIgniter ne semble pas avoir une méthode mutli-insert. De plus, même si elle avait, vous pouvez rencontrer des problèmes comme:

  • Frapper le bouchon de longueur de requête maximale
  • avoir à verrouiller la table jusqu'à ce que les inserts sont faits
  • La gestion des erreurs peut être un peu plus difficile
  • ...
0

Codeigniter 2 (version à venir) aura une méthode d'insertion par lots.

+0

merci, je suis déjà en utilisant ci 2, recherchera la documentation. –

0

Dans CI 2, il existe une fonction d'enregistrement actif set_insert_batch().

+1

Aucune documentation cependant, et un tableau que j'ai assemblé ne sera pas inséré –

3

Il est bien documenté pourrait maintenant être utile pour quelqu'un:

$data = array(
    array(
     'title' => 'My title' , 
     'name' => 'My Name' , 
     'date' => 'My date' 
    ), 
    array(
     'title' => 'Another title' , 
     'name' => 'Another Name' , 
     'date' => 'Another date' 
    ) 
); 

$this->db->insert_batch('mytable', $data); 

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date') 
Questions connexes