Tôi không hiểu bạn đã thử những cách nào, nhưng tôi sẽ cố gắng trả lời:
theo bind_param manual
:
đối số đầu tiên của bind_param
là một chuỗi , như 'ssss'
.
thứ hai và các đối số khác - là các giá trị được chèn vào một truy vấn.
Vì vậy, $a_params
của bạn mảng phải không
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:array(4)
0:"s"
1:"s"
2:"s"
3:"s"
Nhưng:
0:"ssss"
1:"New Zealand"
2:"Grey Lynn"
3:"Auckland"
4:"Auckland"
Nhìn thấy? Tất cả các giá trị là chuỗi. Và các loại trình giữ chỗ là loại đầu tiên.
Cũng hãy xem xét thứ tự của các đối số trong $a_params
phải giống với thứ tự của các tham số trong bind_param
. Điều này có nghĩa là $a_params
thích
0:"New Zealand"
1:"Grey Lynn"
2:"Auckland"
3:"Auckland"
4:"ssss"
sai. Vì phần tử đầu tiên của $a_params
sẽ là đối số đầu tiên của bind_param
và trong trường hợp này, nó không phải là "ssss"
chuỗi.
Vì vậy, điều này có nghĩa là sau khi bạn điền $a_params
với các giá trị, chuỗi của trình giữ chỗ phải được thêm vào đầu $a_params
, với array_unshift
ví dụ:
// 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);
Trong trường hợp cách này không hiệu quả, bạn có thể tham khảo một phần của câu trả lời bạn đã cung cấp
, trong đó các giá trị của $a_params
được chuyển bằng tham chiếu đến một mảng khác $tmp
, trong trường hợp của bạn, bạn có thể thử một cái gì đó như:
// 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);