Ich verstehe nicht, wie Sie es versucht haben, aber ich werde versuchen zu antworten:
gemäß bind_param manual
:
erstes Argument von bind_param
ist eine Zeichenfolge , wie 'ssss'
.
zweite und andere Argumente - sind Werte, die in eine Abfrage eingefügt werden sollen.
Also, Ihre $a_params
array sollte nicht sein
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
Aber:
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
Sehen? Alle Werte sind Zeichenfolgen. Und Platzhaltertypen sind die ersten.
Berücksichtigen Sie auch diese Reihenfolge der Argumente in $a_params
muss mit der Reihenfolge der Parameter in bind_param
übereinstimmen . Das heißt, also $a_params
wie
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
ist falsch. Weil erstes Element von $a_params
wird das erste Argument von bind_param
sein und in diesem Fall ist es kein "ssss"
Zeichenfolge.
Das bedeutet also, nachdem Sie $a_params
ausgefüllt haben Bei Werten sollte die Zeichenkette der Platzhalter am Anfang von $a_params
hinzugefügt werden , mit array_unshift
zum Beispiel:
// 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);
Falls dies nicht funktioniert hat, können Sie sich auf einen Teil der von Ihnen bereitgestellten Antwort
beziehen , wobei Werte von $a_params
werden per Referenz an ein anderes Array $tmp
übergeben , in Ihrem Fall können Sie Folgendes versuchen:
// 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);