No entiendo de qué formas lo has intentado, pero intentaré responder:
según bind_param manual
:
primer argumento de bind_param
es una cadena , como 'ssss'
.
segundo y otros argumentos - son valores que se insertarán en una consulta.
Entonces, su $a_params
la matriz debe ser no
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
Pero:
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
¿Ver? Todos los valores son cadenas. Y los tipos de marcadores de posición son los primeros.
También tenga en cuenta el orden de los argumentos en $a_params
debe ser el mismo que el orden de los parámetros en bind_param
. Esto significa que, es decir, $a_params
Me gusta
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
Está Mal. Porque el primer elemento de $a_params
será el primer argumento de bind_param
y en este caso no es un "ssss"
cadena.
Entonces, esto significa que después de completar $a_params
con valores, la cadena de marcadores de posición debe agregarse al comienzo de $a_params
, con array_unshift
por ejemplo:
// 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);
En caso de que esto no funcione, puede consultar una parte de la respuesta que proporcionó
, donde los valores de $a_params
se pasan por referencia a otra matriz $tmp
, en tu caso puedes intentar algo como:
// 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);