खुशी है कि आपने इसका समाधान किया। हालांकि, यह कारण . को संबोधित करने के लिए है क्यों bindParam()
आपके लिए काम नहीं किया। यह कोई बग नहीं है, यह डिजाइन द्वारा इस तरह से काम करता है।
दस्तावेज़ों के अनुसार :
(जोर मेरा)
उपरोक्त को ध्यान में रखते हुए, यह:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...हर पैरामीटर को $rowvalue
. से बाइंड कर देगा संदर्भ द्वारा जो, क्वेरी निष्पादन के समय, हमेशा 1
. होगा ($rowdata
. का अंतिम तत्व )
bindParam()
. का उपयोग करके इसे काम करने का तरीका कुछ ऐसा होगा:
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowdata[$rowname]);
90 }
...या, शायद, यहां तक कि:
87 foreach($rowdata as $rowname => &$rowvalue)
88 {
89 $stmt->bindParam(':'.$rowname, $rowvalue);
90 }
...ताकि प्रत्येक पैरामीटर संबंधित सरणी तत्व . को संदर्भित करे .
एक विकल्प, जैसा कि ऊपर बताया गया है, bindValue()
होगा जो पैरामीटर को मान के आधार पर बांधता है संदर्भ के बजाय। इसका मतलब है कि पैरामीटर का मूल्यांकन उस समय किया जाएगा bindValue()
कहा जाता है और उस समय नहीं जब वास्तव में इसकी आवश्यकता होती है (अर्थात क्वेरी निष्पादन):
87 foreach($rowdata as $rowname => $rowvalue)
88 {
89 $stmt->bindValue(':'.$rowname, $rowvalue);
90 }
बेशक, दूसरा विकल्प खिला रहा है execute()
मापदंडों की एक सरणी के साथ, जो execute()
. देता है बाध्यकारी भाग को हल करें (इस प्रकार मेरा व्यक्तिगत पसंदीदा!) ।