Nechápu, jaké způsoby jste zkoušel, ale pokusím se odpovědět:
podle bind_param manual
:
první argument parametru bind_param
je řetězec , například 'ssss'
.
druhý a další argumenty – jsou hodnoty, které mají být vloženy do dotazu.
Takže vaše $a_params
pole by nemělo
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"
Vidět? Všechny hodnoty jsou řetězce. A typy zástupných symbolů jsou první.
Vezměte také v úvahu pořadí argumentů v $a_params
musí být stejné jako pořadí parametrů v bind_param
. To znamená, že, tj. $a_params
jako
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
je špatně. Protože první prvek $a_params
bude prvním argumentem bind_param
a v tomto případě to není "ssss"
řetězec.
To znamená, že po vyplnění $a_params
s hodnotami by měl být řetězec zástupných symbolů přidán na začátek $a_params
, s array_unshift
například:
// 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);
V případě, že to nefungovalo, můžete se podívat na část odpovědi, kterou jste poskytli
, kde hodnoty $a_params
jsou předány odkazem na jiné pole $tmp
, ve vašem případě můžete zkusit něco jako:
// 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);