Ik begrijp niet welke manieren je hebt geprobeerd, maar ik zal proberen te antwoorden:
volgens de bind_param manual
:
eerste argument van bind_param
is een tekenreeks , zoals 'ssss'
.
tweede en andere argumenten - zijn waarden die in een query moeten worden ingevoegd.
Dus je $a_params
array moet niet . zijn
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
Maar:
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
Zien? Alle waarden zijn strings. En de typen tijdelijke aanduidingen zijn de eerste.
Houd ook rekening met die volgorde van argumenten in $a_params
moet hetzelfde zijn als de volgorde van de parameters in bind_param
. Dit betekent dat, d.w.z. $a_params
leuk vinden
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
is fout. Omdat het eerste element van $a_params
zal het eerste argument zijn van bind_param
en in dit geval is het geen "ssss"
tekenreeks.
Dit betekent dus dat nadat u $a_params
. heeft ingevuld met waarden, moet de tekenreeks van tijdelijke aanduidingen worden toegevoegd aan het begin van $a_params
, met array_unshift
bijvoorbeeld:
// 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);
Als dit niet werkt, kun je een deel van het antwoord dat je hebt gegeven
raadplegen. , waarbij waarden van $a_params
worden doorgegeven door verwijzing naar een andere array $tmp
, in jouw geval kun je iets proberen als:
// 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);