थोड़ी देर के लिए इस पर मेरे सिर खरोंच गया ....पीडीओ :: ATTR_AUTOCOMMIT पर ध्यान नहीं देता गैर लेन-देन सम्मिलित/अपडेट
मैं pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
के साथ एक पीडीओ वस्तु है के रूप में मैं कुछ InnoDB तालिकाओं के साथ FOR UPDATE
उपयोग करना चाहते हैं। MySQL प्रलेखन पढ़ना, FOR UPDATE
केवल पढ़ने पंक्तियों ताला अगर होगा:
- आप एक सौदे में हैं
- आप नहीं हैं किसी लेनदेन में और
set autocommit=0
जारी किया गया है
तो, मैं कर रहा हूँ पीडीओ ऑब्जेक्ट को पंक्तियों को लॉक करने की अनुमति देने के लिए ATTR_AUTOCOMMIT
का उपयोग करना। किसी भी मामले में, यह लागू करने के लिए INSERT और अद्यतन विवरण का कारण बन रहा है। ये बयान FOR UPDATE
के साथ कुछ भी करने के लिए नहीं हैं, वे तैयार बयान के साथ एक ही पीडीओ ऑब्जेक्ट के माध्यम से चल रहे हैं।
xxx Connect [email protected]
xxx Query set autocommit=0
xxx Query INSERT INTO foo_tbl (bar, baz) VALUES ('hello','world')
xxx Quit
PHP/पीडीओ शिकायत नहीं है, लेकिन तालिका से चयन पता चलता है कि डेटा लिखा नहीं किया गया है:
मेरे MySQL क्वेरी लॉग तरह दिखता है।
जो प्रश्न मैं चला रहा हूं वह हजारों बार पहले चला गया है; केवल ATTR_AUTOCOMMIT
परिवर्तन किया गया है। उस विकल्प को हटाने से सब कुछ फिर से काम करता है। autocommit=0
विकल्प के साथ लेनदेन ठीक काम कर रहे हैं।
क्या पीडीओ ऑब्जेक्ट (commit()
पर सही कॉल करने की आवश्यकता है अतिरिक्त परिवर्तन हैं कि यह लेनदेन में नहीं है) परिवर्तनों को छूने के लिए? असल में, मैं एक सादा पीडीओ ऑब्जेक्ट चाहता हूं लेकिन इनो डीबी टेबल के लिए लेनदेन के बाहर पंक्तियों को लॉक करने के विकल्प के साथ (पृष्ठभूमि के लिए बहुत लंबा और उबाऊ क्यों है)।
मुझे यकीन है कि यह कुछ बेवकूफ मैं खरोंच याद आ रही है सिर
चिंता न करें, हम सभी कभी-कभी चीजों को याद करते हैं! मुझे पता है कि यह मेरे साथ बहुत अधिक होता है मैं स्वीकार करना चाहता हूं :-) – Josh