यदि आप PDO::ATTR_EMULATE_PREPARES
की डिफ़ॉल्ट सेटिंग को बंद कर देते हैं , तो यह काम करेगा। मुझे अभी पता चला है कि वह सेटिंग डिफ़ॉल्ट रूप से MySQL के लिए चालू है, जिसका अर्थ है कि आप वास्तव में कभी भी तैयार कथन का उपयोग नहीं करते हैं, PHP आंतरिक रूप से आपके लिए गतिशील एसक्यूएल बनाता है, आपके लिए मानों को उद्धृत करता है और प्लेसहोल्डर को प्रतिस्थापित करता है। हां, एक प्रमुख wtf.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!
प्रदर्शन कारणों से डिफ़ॉल्ट रूप से तैयारियों का अनुकरण किया जाता है।
साथ ही देखें PDO MySQL:PDO::ATTR_EMULATE_PREPARES का उपयोग करें या नहीं?