2017-09-25 11 views
-3

salut j'ai un problème avec l'insertion data mon pdoquery insérer seulement un row.pourquoi ma requête pdo insère seulement la dernière rangée

pourquoi la dernière ligne est insérée 2 fois, i, e friday pm

ici est ce que je l'ai fait

s'il vous plaît voir mon construit query ici http://phpio.net/s/54jc

<?php 

function returnValuesNoOfTimes($count,$fields = array()){ 

    $str = str_repeat("(:{$fields['user_id']},:{$fields['day']},:{$fields['am_pm']}),",$count); 

    return rtrim($str,", ");   
} 


function queryBuilderLocallyDone($data = array(),$fields = array(),$user_id,$object_count){ 


/*Inserting user values*/ 

$valuesTimes = returnValuesNoOfTimes($object_count,$fields); 


    $db = getDB(); 


    $sql1="INSERT INTO availability({$fields['user_id']},{$fields['day']},{$fields['am_pm']}) VALUES {$valuesTimes}"; 



    $stmt1 = $db->prepare($sql1);    



    foreach($data as $avb){   

     $stmt1->bindParam("user_id", $user_id,PDO::PARAM_STR); 
     $stmt1->bindParam("day",$avb['day'],PDO::PARAM_STR); 
     $stmt1->bindParam("am_pm",$avb['time'],PDO::PARAM_STR);           
    } 



    $stmt1->execute();   



    // $stmt1->execute();     


} 

mon point de départ appel ci-dessus functions

$data = [ 
     0 => ['day'=> 'monday','time'=>'am'], 
     1 => ['day'=> 'friday','time'=>'pm'] 
    ]; 

    $user_id = 2; 


    $total = count($data); 

    $fields = ['id'=>'','user_id'=>'user_id','day'=>'day','am_pm'=>'am_pm']; 
    queryBuilderLocallyDone($data,$fields,$user_id,$total); 

Question Pourquoi le dernier rang est inséré deux fois?

s'il vous plaît aidez-moi merci d'avance !!!!

+4

Préparer en dehors de la boucle, lier et exécuter dans la boucle. – Script47

+0

Où sont définis vos espaces réservés pour les valeurs? – Script47

+0

J'ai écrit tellement 'code' pour' exécuter la requête à la fois' mais avec la réponse ci-dessous chaque fois que je dois exécuter. S'il vous plaît voir sa démo ici http://phpio.net/s/5470 – EaB

Répondre

2

Veuillez insérer $ stmt1-> execute(); dans le foreach

foreach($data as $avb){   

    $stmt1->bindParam("user_id", $user_id,PDO::PARAM_STR); 
    $stmt1->bindParam("day",$avb['day'],PDO::PARAM_STR); 
    $stmt1->bindParam("am_pm",$avb['time'],PDO::PARAM_STR);           
    $stmt1->execute();   
}