2012-04-22 5 views
8

MySQL डॉक्स में, वहाँ एक लेन-देन के बाद mysql_affected_rows उपयोग के बारे में एक नोट है प्रतिबद्ध: http://php.net/manual/en/function.mysql-affected-rows.phpपीडीओएसटेमेंट :: पंक्ति गणना परिणाम जब पीडीओ :: प्रतिबद्ध के बाद उपयोग किया जाता है?

नोट: लेन-देन
आप लेन-देन का उपयोग कर रहे हैं, तो आप mysql_affected_rows() के बाद कॉल करने की आवश्यकता COMMIT के बाद नहीं, आपका INSERT, अद्यतन, या हटाएं क्वेरी। http://www.php.net/manual/en/pdostatement.rowcount.php

इस जब PDO वस्तु का उपयोग कर के लिए प्रतिबद्ध को प्रभावित नहीं करेगा प्रभावित पंक्तियां सम्मिलित, अद्यतन के बाद गिनती या प्रश्नों DELETE मतलब यह है:

हालांकि, वहाँ PDOStatement::rowCount दस्तावेज़ पर ऐसी कोई टिप्पणी है?

+0

प्रतिबद्धता के बाद, 'प्रभावित_रो' का अर्थ अस्पष्ट हो जाता है। क्या यह संपूर्ण लेनदेन से प्रभावित पंक्तियों की कुल संख्या है? या क्या यह लेनदेन के भीतर अंतिम ऑपरेशन की पंक्तियों की संख्या है? अगर घोंसले वाले लेन-देन किए गए थे, तो किसी भी पंक्ति को प्रभावित/पूर्ववत किया जाना चाहिए, आदि ... –

+0

@MarcB बात यह है कि, यह एक 'पीडीओएसएटमेंट-> पंक्ति गणना()' यानी नहीं 'पीडीओ-> पंक्ति गणना() इसलिए इसे आखिरी पूछताछ को आखिरी लेन-देन नहीं करना चाहिए। – Ozzy

+0

mysql_affected_rows() PDOStatement-> rowCount() करने का एक और तरीका है। दोनों को केवल MySQL के बाद ही बुलाया जा सकता है, अन्यथा कोई भी पंक्ति प्रभावित नहीं होगी। –

उत्तर

12

निष्पादित प्रत्येक क्वेरी के लिए एक पीडीओएसटेमेंट वापस किया जाता है। आप अपने कोड में किसी भी समय PDOStatement-> rowCount() का उपयोग करने में सक्षम होंगे (लेनदेन के दौरान या उसके बाद रोलबैक/प्रतिबद्धता कोई फर्क नहीं पड़ता)। प्रत्येक वस्तु स्वयं को बनाए रखने का ख्याल रखती है।

कारण mysql_affected_rows का लेनदेन नोट है क्योंकि यह केवल एक ही MySQL कनेक्शन संसाधन से अवगत है। इसका मतलब है कि जब आप लेनदेन (प्रतिबद्ध/रोलबैक) पूरा करते हैं तो डीबी को एक नई क्वेरी भेजी जाती है, इस प्रकार प्रभावित पंक्तियों की संख्या के लिए कौन सा परिणाम संसाधित किया जा रहा है।

संबंधित मुद्दे