2009-04-20 11 views
5

पर काम नहीं कर रहा है इसलिए मैं कुछ समय के लिए PHP के पीडीओ का उपयोग अपने डेटाबेस गोटो क्लास के रूप में कर रहा हूं, दुर्भाग्यवश आज क्लाइंट के सर्वर पर कुछ समय के लिए डिबगिंग के बाद (PHP 5.2.6 के साथ स्थापित) मैं this खोजता हूं। हमने नवीनतम स्थिर रिलीज (5.2.9) में अपग्रेड करने की कोशिश की लेकिन समस्या बनी हुई है।पीडीओ की पंक्ति गणना() PHP 5.2.6+

क्या किसी ने कोई कामकाज पाया है?

+0

मुझे यकीन नहीं है कि आप क्या खोज रहे हैं, आप प्रभावित_रो() को कॉल कर रहे हैं और एक चयन कथन के लिए शून्य वापस ले रहे हैं? एक चयन किसी भी पंक्ति को प्रभावित नहीं करता है। –

+0

मैं पिछले वर्ष में mysql_num_rows() –

+0

के पीडीओ समकक्ष की तलाश में हूं, आपने कैसे हल किया? – Strae

उत्तर

6

आप the FOUND_ROWS() function का उपयोग करके इसे MySQL के माध्यम से स्वयं कर सकते हैं, यह सुनिश्चित न करें कि कोई बेहतर विकल्प है या नहीं।

संपादित करें: ऐसा लगता है कि MySQL के साथ यह संभव था क्योंकि यह आंतरिक रूप से सभी परिणाम पंक्तियां प्राप्त करता है और आपको यह जानकारी देने में सक्षम होने के लिए उन्हें बफर किया जाता है। mysql_unbuffered_query() देखें। यदि आप mysql_query() के बजाय उस फ़ंक्शन का उपयोग करते हैं, तो mysql_num_rows() फ़ंक्शन काम नहीं करेगा। यदि आपको पीडीओ का उपयोग करते समय पंक्तियों की संख्या जानने की ज़रूरत है, तो आप पीडीओ से सभी पंक्तियों को एक सरणी में ला सकते हैं और फिर count() का उपयोग कर सकते हैं।

+2

+1 यहां तक ​​कि MySQL सी एपीआई आपको सभी को लाने से पहले पंक्तियों की संख्या भी बता सकता है। –

+0

अच्छी पंक्ति गणना() केवल परिणाम मिलने के बाद ही चलाया जाता है, इसलिए मेरा मानना ​​है कि उन्हें पहले से ही –

1

नोटिस आपको SELECT प्रश्नों के लिए rowCount() का उपयोग नहीं करना चाहिए क्योंकि PDOStatement-> rowCount() पिछले PDLETEatement ऑब्जेक्ट द्वारा निष्पादित अंतिम DELETE, INSERT, या UPDATE कथन से प्रभावित पंक्तियों की संख्या देता है।

इसके बजाय आप fetchAll() को सरणी में उपयोग कर सकते हैं और फिर गिनती()।

8

डाटाबेस की पंक्तियों के लिए आपको गिनती देने का एकमात्र तरीका क्वेरी चलाने और पंक्तियों की संख्या की गणना करना है।

MySQL एक्सटेंशन डिफ़ॉल्ट रूप से एक buffered क्वेरी मोड का उपयोग करता है जो पूरे डेटासेट को PHP में नियंत्रण से पहले स्मृति में लाया जाता है और यह पंक्तियों को संसाधित करना शुरू कर सकता है।

पीडीओ डिफ़ॉल्ट रूप से एक unbuffered मोड का उपयोग करता है जो पेज लोड समय में कम विलंबता का कारण बनता है और आम तौर पर आप जो चाहते हैं। व्यापार बंद यह है कि rowCount() संपूर्ण डेटासेट प्राप्त होने तक वैध जानकारी वापस नहीं करेगा।

तो आप उस गिनती को कैसे प्राप्त करते हैं?

आसान:

$q = $db->query("SELECT ..."); 
$rows = $q->fetchAll(); 
$rowCount = count($rows); 
echo "There are $rowCount rows\n"; 
foreach ($rows as $row) { 
    print_r($row); 
} 

लेकिन वह बेकार है क्योंकि यह सभी पंक्तियों प्रश्नों सामने और बनाता है मेरे पृष्ठ लोड धीमी, पुराने mysql विस्तार इस समस्या नहीं था !?

लेकिन यह वही है जो पुराने mysql एक्सटेंशन वास्तव में कवर के तहत कर रहा है; यह गिनती पाने का यही एकमात्र तरीका है।

+1

लाया जाएगा। मुझे वही समस्या मिली है और 'fetchAll ... count() 'trick के साथ' हल 'किया गया है। – Strae

+0

मैं एक आवेदन पर काम कर रहा हूं और 'rowCount()' पर भरोसा करना चाहता था, लेकिन यह सुनिश्चित नहीं था कि यह अविश्वसनीय क्यों था। एक प्रश्न पोस्ट करने वाला था, लेकिन आपका उत्तर पर्याप्त रूप से इसे कवर करने से ज्यादा था। श्रीमान को +1 –

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