Nie rozumiem, jakich sposobów próbowałeś, ale postaram się odpowiedzieć:
zgodnie z bind_param manual
:
pierwszy argument bind_param to ciąg , jak 'ssss' .
drugi i inne argumenty — to wartości, które należy wstawić do zapytania.
Więc twoje $a_params tablica powinna być nie
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
Ale:
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
Widzieć? Wszystkie wartości są ciągami. A typy symboli zastępczych są pierwszymi.
Weź również pod uwagę kolejność argumentów w $a_params musi być taka sama jak kolejność parametrów w bind_param . Oznacza to, że np. $a_params lubię
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
jest źle. Ponieważ pierwszy element $a_params będzie pierwszym argumentem bind_param iw tym przypadku nie jest to "ssss" ciąg.
Oznacza to, że po wypełnieniu $a_params z wartościami należy dodać ciąg znaków zastępczych na początku $a_params , z array_unshift na przykład:
// 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);
Jeśli to nie zadziałało, możesz zapoznać się z częścią odpowiedzi, którą podałeś
, gdzie wartości $a_params są przekazywane przez odwołanie do innej tablicy $tmp , w Twoim przypadku możesz spróbować czegoś takiego:
// 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);