2017-12-15 7 views
2

foreach 루프를 사용하여 매개 변수 유형 및 매개 변수 값을 데이터베이스에 삽입하기 전에 array으로 채 웁니다. 모든게 잘 작동하고 DB에 게시하지만, 그들은 (참조로) array에 추가 될 때 두 값을 동일하게 보내는 이유를 알 수 없습니다. 나는 unset();을 호출하는 것을 피곤하지만 트릭을하지는 않는다.call_user_func_array에 대한 foreach 루프 채우기 배열

function insertUsers($db, $sql, $vals){ 
    $stmt= $db->prepare($sql); 
    $types=''; 
    $types= $types ?: str_repeat("s", count($vals)); 
    $inputArray [] = &$types; 

    foreach($vals as $key=>$value){ 
     $inputArray[]= &$value; 
     unset($key); 
    } 
    print_r($inputArray); 

    call_user_func_array(array($stmt, 'bind_param'), $inputArray); 
     $stmt->execute(); 
     $stmt->close(); 
    } 

결과는 존재 종료 :

당신은 foreach() 내부 거기에서 &를 제거해야
Array 
(
    [0] => ss 
    [1] => tyuty (note this value changes to the last value) 
    [2] => tyuty 
) 
+0

참조를 사용하여 함수를 호출 한 위치에 결과를 전달하려면 모든 단계에서 '&'를 사용해야합니다. 나는. 'insertUsers ($ db, $ sql, & $ vals)','foreach ($ val = as & $ value)'를 사용합니다. – jh1711

답변

2

-

foreach($vals as $key=>&$value){ // put & here 
    $inputArray[]= $value; // remove & and unset not needed actually 
} 

그리고이 함수 인수 내부&도 추가 -

function insertUsers($db, $sql, &$vals){