2010-04-23 14 views
13

पीडीओ स्पष्ट रूप से किसी चयनित क्वेरी से लौटाई गई पंक्तियों की संख्या को गिनने का कोई मतलब नहीं है (mysqli में num_rows चर) है।PHP पीडीओ - न्यू पंक्तियां

क्या ऐसा करने का कोई तरीका है, count($results->fetchAll()) का उपयोग करने से कम?

+1

http://stackoverflow.com/questions/460010/work-around-for-php5s-pdo-rowcount-mysql-issue का संभावित डुप्लिकेट - यह प्रश्न आपके जैसा ही है। स्वीकार्य उत्तर वही है जो आप चाहते हैं। – zombat

+5

मैंने उस सवाल को देखा, लेकिन जवाब बेकार है। डीबी को दूसरी क्वेरी चलाने के लिए बस रिकॉर्ड्स सेट में संग्रहीत पंक्तियों की संख्या को देखने के लिए वास्तव में गूंगा है। – Ian

उत्तर

12

मैनुअल के अनुसार, PDOStatement->rowCount विधि है; लेकिन यह (के हवाले से) नहीं किया जाना चाहिए:

सबसे डेटाबेस के लिए, PDOStatement::rowCount() नहीं वापसी एक SELECT बयान से प्रभावित पंक्तियों की संख्या है।
इसके बजाय, PDO::query() अपने इच्छित SELECT बयान के रूप में एक ही विधेय के साथ एक SELECT COUNT(*) बयान जारी करने के लिए उपयोग करते हैं, तो पंक्तियों को वापस कर दी जाएगा की संख्या को पुनः प्राप्त PDOStatement::fetchColumn() का उपयोग करें।
आपका आवेदन सही कार्रवाई कर सकता है।


आप पहले से ही एक recordset है, और पता है कि कैसे कई लाइनों उस में कर रहे हैं चाहते हैं, आप डेटा प्राप्त करने का, fetch* एक विधि का उपयोग होगा; और गिनती का उपयोग करें - जैसा कि आपने सुझाव दिया था।

+7

हाँ, इस प्रकार मेरी समस्या। यह कैसे संभव है कि पीडीओ * के पास num_rows फ़ंक्शन नहीं है? हर दूसरे डीबी कनेक्टर lib वहाँ वहाँ है। – Ian

+0

यदि आपके पास डेटा है, तो आप अपनी लाइनों की संख्या को गिन सकते हैं * (जैसे आपने सुझाव दिया) *; इसलिए मुझे लगता है कि ऐसी विधि के लिए कोई वास्तविक * आवश्यकता नहीं है जो ... –

+5

गिनती के लिए सिर्फ सभी डेटा को पकड़ना, फिर उस सरणी को फेंकना बहुत अपमानजनक है, खासकर यदि यह एक बड़ी सरणी है .. – Ian

0

एक और विकल्प num_rowsmysqli में परिवर्तनीय और संबंधित सी एपीआई फ़ंक्शन mysql_num_rows() में भिन्न हो सकता है। MySQL फ़ंक्शन FOUND_ROWS() का उपयोग करना है जो परिणाम में सभी रिकॉर्ड्स को गिनने के बिना समान जानकारी देता है।

उदाहरण:

$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn() 
+0

इस उत्तर को आजकल कोई समझ नहीं आता है क्योंकि आप नियमित रूप से गिनती कर सकते हैं –

2

हालांकि पीडीओ जाहिरा तौर पर पंक्तियों की संख्या mysql के लिए एक का चयन क्वेरी से लौटे गिनती करने के लिए हर तरह की है, क्या अधिक महत्वपूर्ण है है कि वहाँ में इस तरह के एक समारोह के लिए कोई फायदा नहीं है प्रथम स्थान।

प्रत्येक बार जब आप SELECT क्वेरी के लिए rowCount() का उपयोग करने का विचार रखते हैं, तो यह या तो अधूरा या हानिकारक होगा। PDO rowCount() देखें:

    मामले में
  • आप पहले से ही चयनित डेटा है, इस समारोह ज़रूरत से ज़्यादा के रूप में आप बस डेटा
  • आप केवल संख्या प्राप्त करने के लिए इस समारोह का उपयोग करना चाहते मामले में भरोसा कर सकते हैं, करेंगे हानिकारक है यह, क्योंकि आपको इसे गिनने के लिए केवल डेटा का चयन नहीं करना चाहिए। इसके बजाय SELECT गिनती (*) का उपयोग करके गिनती का चयन करें।
+2

क्या आपने इस प्रश्न के स्वीकृत उत्तर को भी पढ़ा था? पीडीओ के दस्तावेज़ीकरण से: "यदि संबंधित पीडीओएसेटेटमेंट द्वारा निष्पादित अंतिम SQL कथन एक SELECT कथन था, तो कुछ डेटाबेस उस कथन द्वारा लौटाई गई पंक्तियों की संख्या वापस कर सकते हैं। हालांकि, इस व्यवहार को सभी डेटाबेस के लिए गारंटी नहीं है और इसके लिए भरोसा नहीं किया जाना चाहिए पोर्टेबल अनुप्रयोगों। " – Ian

+3

ठीक है अगर आप पोर्टेबल एप्लिकेशन के लिए पूछ रहे हैं, तो अपने प्रश्न को mysql के साथ टैग न करें। –

+0

मुझे गिनने के बारे में कैसे जाना चाहिए? मैं डेटाबेस से डेटा प्रदर्शित करने के लिए बाद में HTML दस्तावेज़ में एक PHP MySQL क्वेरी का उपयोग कर रहा हूं, लेकिन जिस तत्व में मैं गिनती प्रदर्शित करना चाहता हूं वह डेटा लाने और डेटा प्रदर्शित करने से पहले आता है ??? – Anthony

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