मुझे समझ नहीं आया कि आपने किन तरीकों का प्रयास किया है, लेकिन मैं उत्तर देने का प्रयास करूंगा:
bind_param
. का पहला तर्क एक स्ट्रिंग है , जैसे 'ssss'
।
दूसरा और अन्य तर्क - एक क्वेरी में डालने के लिए मान हैं।
तो, आपका $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
filled भरने के बाद मानों के साथ, प्लेसहोल्डर्स की स्ट्रिंग को $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);