Не разбирам какви начини сте опитвали, но ще се опитам да отговоря:
според bind_param manual
:
първи аргумент на bind_param
е низ , като 'ssss'
.
втори и други аргументи - са стойности, които се вмъкват в заявка.
И така, вашият $a_params
масивът трябва да е не
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
Но:
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
Виждаш ли? Всички стойности са низове. И типовете заместители са първият.
Също така вземете под внимание този ред на аргументите в $a_params
трябва да е същият като реда на параметрите в bind_param
. Това означава, че, т.е., $a_params
харесвам
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
не е наред. Тъй като първият елемент от $a_params
ще бъде първият аргумент на bind_param
и в този случай това не е "ssss"
низ.
Така че това означава, че след като сте попълнили $a_params
със стойности низът на заместителите трябва да се добави в началото на $a_params
, с array_unshift
например:
// make $a_param_type a string
$str_param_type = implode('', $a_param_type);
// add this string as a first element of array
array_unshift($a_params, $str_param_type);
// try to call
call_user_func_array(array($stmt, 'bind_param'), $a_params);
В случай, че това не работи, можете да се обърнете към част от отговора, който сте предоставили
, където стойностите на $a_params
се предават чрез препратка към друг масив $tmp
, във вашия случай можете да опитате нещо като:
// make $a_param_type a string
$str_param_type = implode('', $a_param_type);
// add this string as a first element of array
array_unshift($a_params, $str_param_type);
$tmp = array();
foreach ($a_params as $key => $value) {
// each value of tmp is a reference to `$a_params` values
$tmp[$key] = &$a_params[$key];
}
// try to call, note - with $tmp, not with $a_params
call_user_func_array(array($stmt, 'bind_param'), $tmp);