आपको bindValue का उपयोग करना होगा इसके बजाय bindParam ।
जब आप बाइंडपरम का उपयोग करते हैं, तो यह पैरामीटर को प्रदान किए गए वेरिएबल को बांधता है, न कि वेरिएबल के मान को।
तो, अगर आप ऐसा करते हैं:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
इसे वास्तव में 5 के बजाय 6 के साथ निष्पादित किया जाता है। ऐसा करने के लिए, विधि में चर का संदर्भ होना चाहिए। आपके पास एक शाब्दिक का संदर्भ नहीं हो सकता है, इसलिए इसका मतलब है कि बाइंडपरम का उपयोग शाब्दिक (या कुछ भी जिसका आप संदर्भ नहीं दे सकते) के साथ नहीं किया जा सकता है।
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
फिर:
$stmt->bindParam(1, 1, PDO::PARAM_INT);
//invalid because there's no way to pass a literal 1 by reference
$stmt->bindValue(1, 1, PDO::PARAM_INT);
//valid