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

पीडीओ एकाधिक नामित प्लेसहोल्डर डेटा पुनर्प्राप्त नहीं करते हैं

bindParam को एक संदर्भ की आवश्यकता है

समस्या आपके द्वारा फ़ोरैच लूप में पैरामीटर्स को बाइंड करने के तरीके के कारण होती है।

foreach($bindings as $placeholder=>$bound){
    echo $placeholder . " - " . $bound."<br/>";
    $stmt->bindParam($placeholder, $bound);
}

bindParam एक संदर्भ की आवश्यकता है। यह वेरिएबल को बांधता है, मान को नहीं, स्टेटमेंट से। चूंकि फ़ोरैच लूप में वेरिएबल प्रत्येक पुनरावृत्ति की शुरुआत में रीसेट किया जाता है, केवल $bound के लिए अंतिम संदर्भ बरकरार रहता है, और आप अंत में अपने सभी प्लेसहोल्डर्स को इससे बांध देते हैं।

इसलिए आपका कोड तब काम करता है जब $query['where'] इसमें केवल एक प्रविष्टि होती है, लेकिन एक से अधिक होने पर विफल हो जाती है।

आप समस्या को 2 तरीकों से हल कर सकते हैं:

संदर्भ द्वारा पास करें

foreach($bindings as $placeholder => &$bound) {  //pass $bound as a reference (&)
    $stmt->bindParam($placeholder, $bound);     // bind the variable to the statement
}

मूल्य से गुजरें

bindValueका उपयोग करें bindParam . के बजाय :

foreach($bindings as $placeholder => $bound) {  
    $stmt->bindValue($placeholder, $bound);     // bind the value to the statement
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL डुप्लिकेट रिकॉर्ड हटाएं लेकिन नवीनतम रखें

  2. क्वेरी द्वारा समूह के साथ मैसकल मैक्स

  3. एक MySQL डेटाबेस को लॉक करना ताकि एक बार में केवल एक ही व्यक्ति एक क्वेरी चला सके?

  4. मैं कैसे देख सकता हूं कि MySQL डेटाबेस/टेबल/कॉलम कौन सा वर्ण सेट करता है?

  5. MySQL:एक टेबल से रिकॉर्ड गिनें और फिर दूसरे को अपडेट करें