यहां समस्या यह है कि आप पैरामीटर को bindParam
. के साथ बाध्य कर रहे हैं , जो संदर्भ द्वारा बाध्यकारी का उपयोग करता है। आपके मामले में आपको bindValue
. का उपयोग करना चाहिए इसके बजाय:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
या आप अपनी सरणी को सीधे execute()
. पर पास कर सकते हैं विधि:
$sql->execute( $binders );
जैसा कि मैनुअल में वर्णित है:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
इसलिए जब आपका फ़ोरैच लूप $value
ends समाप्त होता है अंतिम सरणी आइटम का मान है Apple
. तो जब execute
रन, दोनों :ctid
और :p1
मान Apple
. के बराबर होते जा रहे हैं . निश्चित रूप से, यह वह नहीं है जो आप चाहते हैं)