8
votes

Coundigniter Insérer plusieurs rangées dans SQL

Je suis frais à codédiciter. J'ai une forme qui ressemble à quelque chose comme ça.

$name=$_POST['Name'];
$address=$_POST['Address'];
$age=$_POST['Age'];
$email=$_POST['Email'];
$count = count($_POST['Name']);



for($i=0; $i<$count; $i++) {
$data = array(
           'name' => $name[$i], 
           'address' => $address[$i],
           'age' => $age[$i],
           'email' => $email[$i],

           );


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


2 commentaires

Voir ma solution Stackoverflow.com/a/14332078/1045444 ... Vous avez accepté la solution qui n'est pas la plus efficace ... Nous devrions utiliser insertion_batch ();


@Somnathmuluk vous êtes correct. S'il vous plaît voir la question liée que j'ai posée plus tard Stackoverflow.com/Questtions/4166146/...


3 Réponses :


2
votes

Le formulaire que vous montrez créera un tableau $ _Post avec des index de nom, adresse, âge et email. Chacun de ceux-ci contiendra le n nombre de "lignes" votre formulaire fournit. Par exemple:

for($y=0;$y<count($person);$y++){
    $this->db->insert('mytable',$person[$y];
}


3 commentaires

Quelles erreurs sont lancées? J'ai corrigé une erreur de syntaxe avec $ ceci-> entrer-> post {"nom"); ci-dessus.


Fait ça! Une partie d'un appel AJAX avec une fonction de retour complexe, c'est pourquoi cela a dû substituer un exemple plus simple ci-dessus. Voir ma réponse ci-dessous. Ne semble pas être la voie du codécrecteur.


Il semble que $ ceci-> entrée-> post () ne fonctionne pas comme un tableau, alors l'appelant avec un index ne fonctionne pas. Il n'y a rien de mal avec votre réponse postée. L'un des avantages du codédiciteur est la flexibilité. Vous pouvez exécuter PHP régulier aux côtés de fonctions intégrées.



8
votes

Faites votre forme comme ceci:

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


2 commentaires

Lors de l'analyse plus étroite, il ressemble beaucoup à la solution de KevTrout, ceci-> peut-être-> plus-> élégant (); Doit en apprendre davantage sur les tableaux.


Regardez un coup d'oeil à insertion_batch () méthode [ codeigniter.com/user_guide /database/active_record.html]



24
votes

Plusieurs inserts d'insertion / lot sont maintenant pris en charge par le codeigniter. Il tirait une requête plutôt que de tirer trop de requêtes.

$data =array();
for($i=0; $i<$count; $i++) {
$data[$i] = array(
           'name' => $name[$i], 
           'address' => $address[$i],
           'age' => $age[$i],
           'email' => $email[$i],

           );
}

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


1 commentaires

Cela suppose que le pilote le soutient. Cela ne fonctionne pas avec le codédiciter 2.1.4 et le pilote SQLSRV.