あなたがどのように試したかわかりませんが、答えようとします:
bind_param
の最初の引数 文字列です 、'ssss'
のように 。
2番目およびその他の引数-クエリに挿入される値です。
つまり、$a_params
配列はないである必要があります
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
しかし:
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
見る?すべての値は文字列です。そして、プレースホルダーのタイプが最初のものです。
$a_params
の引数の順序も考慮に入れてください bind_param
のパラメータの順序と同じである必要があります 。つまり、$a_params
のように
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
間違っている。 $a_params
の最初の要素が bind_param
の最初の引数になります この場合、それは"ssss"
ではありません 文字列。
つまり、これは、$a_params
を入力した後であることを意味します 値を使用する場合、プレースホルダーの文字列を$a_params
の先頭に追加する必要があります 、array_unshift
を使用 例:
// 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);
これが機能しなかった場合は、$a_params
の値 別の配列$tmp
への参照によって渡されます 、あなたの場合、次のようなことを試すことができます:
// 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);