Je ne comprends pas ce que vous avez essayé, mais je vais essayer de répondre :
selon bind_param manual
:
premier argument de bind_param
est une chaîne , comme 'ssss'
.
second et d'autres arguments - sont des valeurs à insérer dans une requête.
Donc, vos $a_params
le tableau ne doit pas être
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
Mais :
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
Voir? Toutes les valeurs sont des chaînes. Et les types d'espaces réservés sont les premiers.
Tenez également compte de cet ordre des arguments dans $a_params
doit être le même que l'ordre des paramètres dans bind_param
. Cela signifie que, c'est-à-dire $a_params
j'aime
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
est faux. Parce que le premier élément de $a_params
sera le premier argument de bind_param
et dans ce cas ce n'est pas un "ssss"
chaîne.
Donc, cela signifie qu'après avoir rempli $a_params
avec des valeurs, la chaîne des espaces réservés doit être ajoutée au début de $a_params
, avec array_unshift
par exemple :
// 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);
Si cela ne fonctionne pas, vous pouvez vous référer à une partie de la réponse que vous avez fournie
, où les valeurs de $a_params
sont passés par référence à un autre tableau $tmp
, dans votre cas, vous pouvez essayer quelque chose comme :
// 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);