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
}