2017-02-27 1 views
1

Je suis nouveau à PHP et j'essaye d'insérer des données d'un tableau imbriqué dans une base de données. Je remarque cependant que seule la dernière touche: valeur ajoutée (semble presque comme si tout le reste était écrasé). Comment puis-je obtenir une nouvelle ligne de chaque donnée pour que tout soit mis en place?PHP Insérer dans la table ne pas créer une nouvelle ligne de données

$tmpArray = array(array("one" => abc, "two" => def), array("one" => ghi, "two" => jkl)); 

// Scan through outer loop 
foreach ($tmpArray as $innerArray) { 
    // Scan through inner loop 
    foreach ($innerArray as $key => $value) { 
     if ($key === 'one') { 
      $sql = "INSERT INTO test2 (alpha, beta) VALUES ('$key', '$value')"; 
     } 
    } 
} 

Pour simplicty, tout ce que je suis en train de faire est d'obtenir « un » et « abc » mis en alpha et bêta. Ensuite, ayez une autre ligne de la table "one" et "ghi". Mais quand je cours le code, tout ce que je reçois est "un" et "ghi". Quand je mets une déclaration d'écho, tous les trucs corrects sont imprimés. Je ne comprends pas pourquoi ils ne reçoivent pas d'informations dans mes tableaux.

Qu'est-ce que je fais mal? Merci!

+1

Où exécutez-vous l'instruction SQL? Si vous le faites en dehors de la boucle, il n'insèrera que la dernière valeur car $ sql sera écrasé à chaque fois dans la boucle. –

Répondre

2
$sql = "INSERT INTO test2 (alpha, beta) VALUES ('$key', '$value')"; 

Cette ligne remplace chaque fois qu'il est appelé le contenu de la variable $sql. Vous devez concaténer vos cordes ensemble au lieu:

$sql = ''; 
// Scan through outer loop 
foreach ($tmpArray as $innerArray) { 
    // Scan through inner loop 
    foreach ($innerArray as $key => $value) { 
     if ($key === 'one') { 
      $sql .= "INSERT INTO test2 (alpha, beta) VALUES ('$key', '$value'); "; 
     } 
    } 
} 

Encore mieux, comme l'a suggéré dans un commentaire, serait de simplement exécuter la requête directement plutôt que de les stocker dans une variable. Il n'est alors pas nécessaire de concaténer les chaînes ensemble, ni d'activer plusieurs instructions dans un même appel MSQLI.

+0

Cela ne fonctionnera que s'ils utilisent multi_query de mysqli. Il vaudrait mieux lancer l'instruction sql dans la boucle. – aynber

+0

@aynber Vous avez raison, mais si je réponds de la sorte, alors je ne parle pas de l'erreur beaucoup plus profonde qui est la source de la question du demandeur. – AmericanUmlaut

+0

@aynber J'ai édité ma question pour ajouter votre pensée, puisque vous avez raison de dire que c'est la meilleure approche. – AmericanUmlaut