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);