I am using a foreach loop to populate an array with parameter types and parameter values before it inserts into the database. Everything works fine and posts to the db, but I can’t figure out why it sends both values as the same when they are added (as a reference) to the array. I have tired calling unset(); but it doesn’t do the trick.
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();
}
The result ends being:
Array ( [0] => ss [1] => tyuty (note this value changes to the last value) [2] => tyuty )
Advertisement
Answer
You need to remove & from there inside foreach();-
foreach($vals as $key=>&$value){ // put & here
$inputArray[]= $value; // remove & from here and unset() not needed actually
}
And Add & inside function argument too:-
function insertUsers($db, $sql, &$vals){