Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

call_user_func_array() के साथ गतिशील रूप से तैयार कथन बनाएं

मुझे समझ नहीं आया कि आपने किन तरीकों का प्रयास किया है, लेकिन मैं उत्तर देने का प्रयास करूंगा:

bind_param manual के अनुसार :

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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CONCAT () MySQL में डिफ़ॉल्ट वर्णसेट के लिए डिफ़ॉल्ट क्यों नहीं है?

  2. लोड डेटा स्थानीय इनफाइल में वर्जित... PHP

  3. NULL मानों के साथ तुलना करना

  4. PHP MySql:प्रिंट ट्री - पैरेंट चाइल्ड चेकबॉक्स

  5. उपयोगकर्ता इनपुट पर निर्भर लंबी क्वेरी के लिए मैं PHP में MySQL त्रुटि कैसे प्रदर्शित करूं?