2017-12-15 13 views
2

foreachループを使用して、arrayにパラメータタイプとパラメータ値を挿入してからデータベースに挿入します。すべてうまく動作し、データベースに投稿しますが、私はそれが(参照として)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(); 
    } 

結果はビーイングを終了します。

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()の内側そこから&を削除する必要があります。 -

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

、あまりにも関数の引数の内部&を追加します -

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