पीडीओ के साथ पंक्ति गणना


192

चारों ओर कई परस्पर विरोधी कथन हैं। PHP में PDO का उपयोग करके पंक्ति गणना करने का सबसे अच्छा तरीका क्या है? पीडीओ का उपयोग करने से पहले, मैंने बस इस्तेमाल किया mysql_num_rows

fetchAll कुछ ऐसा है जो मैं नहीं चाहता क्योंकि मैं कभी-कभी बड़े डेटासेट के साथ काम कर सकता हूं, इसलिए मेरे उपयोग के लिए अच्छा नहीं है।

क्या तुम्हारे पास कोई सुझाव है?

जवाबों:


265
$sql = "SELECT count(*) FROM `table` WHERE foo = ?"; 
$result = $con->prepare($sql); 
$result->execute([$bar]); 
$number_of_rows = $result->fetchColumn(); 

इसे करने का सबसे सुरुचिपूर्ण तरीका नहीं है, साथ ही इसमें एक अतिरिक्त क्वेरी शामिल है।

पीडीओ के पास PDOStatement::rowCount(), जो जाहिर तौर पर MySql में काम नहीं करता है । क्या मुसीबत है।

पीडीओ डॉक्टर से:

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

संपादित करें: उपरोक्त कोड उदाहरण एक तैयार किए गए कथन का उपयोग करता है, जो कई मामलों में है पंक्तियों की गिनती के उद्देश्य के लिए संभवतः अनावश्यक है, इसलिए:

$nRows = $pdo->query('select count(*) from blah')->fetchColumn(); 
echo $nRows;

इसका मतलब होगा एक अतिरिक्त डेटाबेस क्वेरी करना। मुझे लगता है कि वह पहले ही एक चुनिंदा क्वेरी कर चुका है और अब जानना चाहता है कि कितनी पंक्तियाँ वापस की गईं।
निक

1
निकफ सही है। mysql_num_rows () पीडीओ का उपयोग करते समय काम नहीं करेगा हालांकि यह होगा?
जेम्स

यह सच है, जाहिरा तौर पर वहाँ PDOSatement :: rowCount () है, लेकिन यह MySql में काम नहीं करता है
karim79

11
इस दृष्टिकोण का उपयोग करना, fetchColumn()एक स्ट्रिंग "1234" ... अपने संपादित है देता है echo count($nRows);- count()पी: एक सरणी कार्य है। मैं भी fetchColumn()एक पूर्णांक से परिणाम कास्टिंग प्रकार की सिफारिश करेंगे । $count = (int) $stmt->fetchColumn()
11:59

1
@ karim79 गैर-तैयार स्टेटमेंट दृष्टिकोण वास्तविक संख्या पंक्तियों के बजाय केवल 1 लौटा रहा है। तैयार कथन ठीक काम करता है। मुद्दा क्या हो सकता है?
SilentAssassin

86

जैसा कि मैंने पहले भी इसी तरह के एक प्रश्न के उत्तर में लिखा था , केवल एक ही कारण mysql_num_rows()काम किया है क्योंकि यह आंतरिक रूप से आपको यह जानकारी देने के लिए सभी पंक्तियों को ला रहा था, भले ही यह आपको ऐसा न लगे।

तो पीडीओ में, आपके विकल्प हैं:

  1. MySQL के FOUND_ROWS()फ़ंक्शन का उपयोग करें ।
  2. fetchAll()सभी पंक्तियों को एक सरणी में लाने के लिए पीडीओ के फ़ंक्शन का उपयोग करें , फिर उस count()पर उपयोग करें ।
  3. SELECT COUNT(*)जैसा कि kimim79 ने सुझाया है, एक अतिरिक्त क्वेरी करें ।

8
मुझे mysql_num_rows () के बारे में और अधिक शिक्षित करने के लिए धन्यवाद, ऐसा लगता है कि एक महत्वपूर्ण अड़चन हो सकती है जो मैं खुद दे रहा था। एक बार फिर धन्यवाद।
जेम्स

2
fetch_all वास्तव में fetchAll है () :)
डायनेमिक

2
यदि परिणाम बड़ा है तो विकल्प 2 उचित नहीं है।
एडसन होरासियो जूनियर

FOUND_ROWS () को MySQL से हटा दिया जाएगा ताकि कृपया इसे उपयोग करने से पहले FOUND_ROWS के लिंक की जाँच करें यदि आप पहले से परिचित थे।
दोपहर

29

जैसा कि अक्सर होता है, यह सवाल नरक के रूप में भ्रमित है। लोग दो अलग-अलग कार्यों को ध्यान में रखते हुए यहां आ रहे हैं:

  1. उन्हें यह जानना होगा कि तालिका में कितनी पंक्तियाँ हैं
  2. उन्हें यह जानना होगा कि क्या कोई क्वेरी किसी भी पंक्तियों को वापस करती है

यह दो बिल्कुल अलग कार्य हैं जिनमें कुछ भी सामान्य नहीं है और एक ही फ़ंक्शन द्वारा हल नहीं किया जा सकता है। विडंबना यह है कि उनमें से किसी के लिए भी वास्तविक PDOStatement::rowCount()कार्य का उपयोग नहीं किया गया है।

आइए देखें क्यों

तालिका में पंक्तियों की गिनती

पीडीओ का उपयोग करने से पहले मैं बस इस्तेमाल करता हूं mysql_num_rows()

मतलब आपने पहले ही गलत कर दिया था। सर्वर संसाधनों के उपभोग के मामले में तालिका में पंक्तियों की संख्या का उपयोग करना mysql_num_rows()या rowCount()गणना करना एक वास्तविक आपदा है। एक डेटाबेस को डिस्क से सभी पंक्तियों को पढ़ना पड़ता है, डेटाबेस सर्वर पर मेमोरी का उपभोग करता है, फिर डेटा के इस ढेर को PHP में भेजना, PHP प्रक्रिया की मेमोरी का उपभोग करना, अपने सर्वर को पूर्ण रूप से बिना किसी कारण के बोझ करना।
इसके अलावा, केवल उन्हें गिनने के लिए पंक्तियों का चयन करने से कोई मतलब नहीं है। count(*)इसके बजाय एक क्वेरी चलानी होगी। डेटाबेस वास्तविक पंक्तियों को पढ़े बिना , सूचकांक से बाहर रिकॉर्ड की गणना करेगा और फिर केवल एक पंक्ति लौटाएगा।

इस उद्देश्य के लिए स्वीकृत उत्तर में सुझाया गया कोड उचित है।

गिनती की गई पंक्तियाँ वापस आ गईं।

दूसरा उपयोग मामला उतना व्यर्थ नहीं है जितना कि व्यर्थ है: यदि आपको यह जानने की आवश्यकता है कि क्या आपकी क्वेरी ने कोई डेटा वापस किया है, तो आपके पास हमेशा डेटा ही होता है!

कहो, यदि आप केवल एक पंक्ति का चयन कर रहे हैं। सब ठीक है, आप एक ध्वज के रूप में प्राप्त पंक्ति का उपयोग कर सकते हैं:

$stmt->execute();
$row = $stmt->fetch();
if (!$row) { // here! as simple as that
    echo 'No data found';
}

यदि आपको कई पंक्तियों को प्राप्त करने की आवश्यकता है, तो आप उपयोग कर सकते हैं fetchAll()

fetchAll() जैसा कि मैं कभी-कभी बड़े डेटासेट के साथ काम कर सकता हूं, ऐसा कुछ नहीं है

हां, पहले उपयोग के मामले में यह दोगुना बुरा होगा। लेकिन जैसा कि हमने पहले ही सीखा था, केवल पंक्तियों को केवल उन्हें गिनने के लिए नहीं चुनें, न rowCount()ही साथ में fetchAll()

लेकिन अगर आप वास्तव में चयनित पंक्तियों का उपयोग करने जा रहे हैं, तो उपयोग करने में कुछ भी गलत नहीं है fetchAll()। याद रखें कि वेब एप्लिकेशन में आपको कभी भी बड़ी मात्रा में पंक्तियों का चयन नहीं करना चाहिए। केवल पंक्तियों है कि वास्तव में एक वेब पेज पर उपयोग किया जाएगा चयनित होना चाहिए, इसलिए आप उपयोग करने के लिए मिल गया है LIMIT, WHEREया अपने एसक्यूएल में एक समान खंड। और इस तरह की डेटा की मामूली मात्रा के लिए इसका उपयोग करना सही है fetchAll()। और फिर, बस इस फ़ंक्शन के परिणाम को स्थिति में उपयोग करें:

$stmt->execute();
$data = $stmt->fetchAll();
if (!$data) { // again, no rowCount() is needed!
    echo 'No data found';
}

और निश्चित रूप से यह बताने के लिए एक अतिरिक्त क्वेरी चलाने के लिए पूर्ण पागलपन होगा कि क्या आपकी अन्य क्वेरी ने किसी भी पंक्तियों को वापस कर दिया है, जैसा कि दो शीर्ष उत्तरों में सुझाया गया है।

एक बड़े परिणाम में पंक्तियों की संख्या की गिनती

ऐसे दुर्लभ मामले में जब आपको वास्तविक बड़ी मात्रा में पंक्तियों (उदाहरण के लिए एक कंसोल एप्लिकेशन में) का चयन करने की आवश्यकता होती है, तो आपको उपयोग की गई स्मृति को कम करने के लिए, एक अप्रतिबंधित क्वेरी का उपयोग करना होगा। लेकिन यह वास्तविक मामला है जब rowCount() उपलब्ध नहीं होगा , इस प्रकार इस समारोह के लिए भी कोई फायदा नहीं है।

इसलिए, यह एकमात्र उपयोग का मामला है जब आपको संभवतः एक अतिरिक्त क्वेरी चलाने की आवश्यकता हो सकती है, यदि आपको चयनित पंक्तियों की संख्या के लिए एक करीबी अनुमान जानना आवश्यक है।


यदि एपीआई को खोज क्वेरी के कुल परिणामों को प्रिंट करने की आवश्यकता है तो यह उपयोगी है। यह आपको केवल 10 या 15 पंक्तियाँ वापस देगा, लेकिन यह भी आपको बताना चाहिए कि कुल परिणाम 284 हैं।
एंड्रेस एसके

4
@andufo यह नहीं है। कृपया याद रखें: एक डेवलपर को इस तरह से कभी नहीं करना चाहिए । खोज क्वेरी को सभी 284 पंक्तियों को कभी भी वापस नहीं करना चाहिए। 15 को दिखाने के लिए लौटना होगा और 284 पाए गए थे यह बताने के लिए अलग-अलग क्वेरी से एक पंक्ति।
आपका कॉमन सेंस

2
यह एक बहुत अच्छा बिंदु है - पहली बार में unintuitive, लेकिन मान्य। ज्यादातर लोग भूल जाते हैं कि दो सरल एसक्यूएल क्वेरी दी गई हैं जिस तरह से तेजी से एक से थोड़ा बड़ा एक से। किसी भी गिनती को सही ठहराने के लिए, आपके पास एक बहुत धीमी क्वेरी होनी चाहिए जिसे अनुकूलित नहीं किया जा सकता है और कुछ परिणाम देगा। यह बात बताने के लिए धन्यवाद!
पीरबर

@ योर कॉमन सेंस: बस डु निश्चित होना: नहीं मिलेगा () अगर परिणाम बहुत बड़ा है तो एक बुरा विचार होगा? क्या तब डेटा का क्रमिक रूप से प्राप्त करने के लिए () का उपयोग करना बेहतर नहीं होगा।
टाइममॉर्नी

@timmornYE जो मेरे उत्तर के अंतिम पैराग्राफ में ठीक वैसा ही कहा गया है
योर कॉमन सेंस

21

यह सुपर लेट है, लेकिन मैं इस समस्या में भाग गया और मैं यह करता हूं:

function countAll($table){
   $dbh = dbConnect();
   $sql = "select * from `$table`";

   $stmt = $dbh->prepare($sql);
    try { $stmt->execute();}
    catch(PDOException $e){echo $e->getMessage();}

return $stmt->rowCount();

यह वास्तव में सरल है, और आसान है। :)


19
इसे गिनने के लिए केवल सभी डेटा का चयन करना, डेटाबेस इंटरैक्शन के सबसे बुनियादी नियमों के खिलाफ है।
आपका कॉमन सेंस

हो सकता है कि आप सभी लौटाए गए मानों के लिए प्रगति पट्टी रखना चाहते हों, इसलिए आपको पंक्तियों की संख्या को जानना होगा।
जॉनी

18

मैंने इसका उपयोग करते हुए समाप्त किया:

$result = $db->query($query)->fetchAll();

if (count($result) > 0) {
    foreach ($result as $row) {
        echo $row['blah'] . '<br />';
    }
} else {
    echo "<p>Nothing matched your query.</p>";
}

12

यह पोस्ट पुरानी है लेकिन पीडीओ के साथ php में पंक्ति गणना करना सरल है

$stmt = $db->query('SELECT * FROM table');
$row_count = $stmt->rowCount();

3
Karim79 के उत्तर में उद्धृत प्रलेखन देखें। यह कभी-कभी काम करता है लेकिन विश्वसनीय नहीं है।
अष्टकूट

5

यह एक पुरानी पोस्ट है, लेकिन विकल्प की तलाश में निराश हो रही है। यह दुर्भाग्यपूर्ण है कि पीडीओ के पास इस सुविधा का अभाव है, विशेष रूप से PHP और MySQL हाथ से जाने के लिए करते हैं।

FetchColumn () का उपयोग करने में एक दुर्भाग्यपूर्ण दोष है क्योंकि आप अब उस परिणाम (प्रभावी रूप से) का उपयोग नहीं कर सकते हैं क्योंकि fetcholumn () अगली पंक्ति में सुई को स्थानांतरित करता है। उदाहरण के लिए, यदि आपके पास एक परिणाम के समान है

  1. Fruit-> केले
  2. Fruit-> एप्पल
  3. Fruit-> ऑरेंज

यदि आप fetcholumn () का उपयोग करते हैं, तो आप यह पता लगा सकते हैं कि 3 फल लौटे हैं, लेकिन यदि आप अब परिणाम के माध्यम से लूप करते हैं, तो आपके पास केवल दो कॉलम हैं, fetcholumn () की कीमत परिणामों के पहले कॉलम में सिर्फ खोजने के लिए है कितनी पंक्तियों को वापस किया गया। कि मैला कोडिंग की ओर जाता है, और यदि लागू किया जाता है तो पूरी तरह से त्रुटि परिणामित होता है।

तो अब, fetcholumn () का उपयोग करते हुए आपको नए सिरे से कार्यशील परिणाम प्राप्त करने के लिए बस नए कॉल और MySQL क्वेरी को लागू करना होगा। (जो आपके अंतिम प्रश्न के बाद उम्मीद से नहीं बदला है), मुझे पता है, संभावना नहीं है, लेकिन ऐसा हो सकता है। साथ ही, सभी पंक्ति गणना सत्यापन पर दोहरे प्रश्नों का ओवरहेड। जो इस उदाहरण के लिए छोटा है, लेकिन एक सम्मिलित क्वेरी पर 2 मिलियन पंक्तियों को पार्स करना, भुगतान करने के लिए सुखद मूल्य नहीं है।

मुझे PHP बहुत पसंद है और दैनिक आधार पर PHP का उपयोग करते हुए बड़े पैमाने पर समुदाय के साथ-साथ इसके विकास में शामिल सभी का समर्थन करता है, लेकिन वास्तव में उम्मीद है कि यह भविष्य के रिलीज में संबोधित किया जाएगा। यह PHP पीडीओ के साथ 'वास्तव में' मेरी एकमात्र शिकायत है, जो अन्यथा एक महान वर्ग है।


2

इसका उत्तर देना क्योंकि मैंने अब तक यह जानकर खुद को इसके साथ फँसा लिया है और शायद यह उपयोगी होगा।

ध्यान रखें कि आप दो बार परिणाम प्राप्त नहीं कर सकते। आपको एरे में परिणाम प्राप्त करना होगा, पंक्ति की गिनती प्राप्त करनी होगी count($array), और आउटपुट परिणाम के साथ foreach। उदाहरण के लिए:

$query = "your_query_here";
$STH = $DBH->prepare($query);
$STH->execute();
$rows = $STH->fetchAll();
//all your results is in $rows array
$STH->setFetchMode(PDO::FETCH_ASSOC);           
if (count($rows) > 0) {             
    foreach ($rows as $row) {
        //output your rows
    }                       
}

1

यदि आप केवल पंक्तियों की एक संख्या (डेटा नहीं) प्राप्त करना चाहते हैं। तैयार कथन में COUNT (*) का उपयोग करने के बाद आपको सभी परिणाम प्राप्त करने और मूल्य पढ़ने की आवश्यकता है:

$sql = "SELECT count(*) FROM `table` WHERE foo = bar";
$statement = $con->prepare($sql); 
$statement->execute(); 
$count = $statement->fetch(PDO::FETCH_NUM); // Return array indexed by column number
return reset($count); // Resets array cursor and returns first value (the count)

वास्तव में एक सरल गणना करने के लिए सभी पंक्तियों (डेटा) को पुनर्प्राप्त करना संसाधनों की बर्बादी है। यदि परिणाम सेट बड़ा है तो आपका सर्वर उस पर चोक हो सकता है।



1

एक क्वेरी के भीतर चर का उपयोग करने के लिए आपको उपयोग करना होगा bindValue()या bindParam()। और के साथ चर नहीं है" . $variable . "

$statement = "SELECT count(account_id) FROM account
                  WHERE email = ? AND is_email_confirmed;";
$preparedStatement = $this->postgreSqlHandler->prepare($statement);
$preparedStatement->bindValue(1, $account->getEmail());
$preparedStatement->execute();
$numberRows= $preparedStatement->fetchColumn();

जीएल


0

जब यह mysql की बात है कि PHP PDO के साथ एक तालिका में कितनी पंक्तियों को गिनना या प्राप्त करना है तो मैं इसका उपयोग करता हूं

// count total number of rows
$query = "SELECT COUNT(*) as total_rows FROM sometable";
$stmt = $con->prepare($query);

// execute query
$stmt->execute();

// get total rows
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$total_rows = $row['total_rows'];

क्रेडिट माइक @ codeofaninja.com पर जाता है


-1

पहला प्रवेश पाने के लिए एक त्वरित एक लाइनर। यह बहुत ही बुनियादी प्रश्नों के लिए अच्छा है।

<?php
$count = current($db->query("select count(*) from table")->fetch());
?>

संदर्भ


-1

मैंने $count = $stmt->rowCount();ओरेकल 11.2 के साथ कोशिश की और यह काम नहीं किया। मैंने नीचे दिखाए अनुसार लूप के लिए उपयोग करने का निर्णय लिया।

   $count =  "";
    $stmt =  $conn->prepare($sql);
    $stmt->execute();
   echo "<table border='1'>\n";
   while($row = $stmt->fetch(PDO::FETCH_OBJ)) {
        $count++;
        echo "<tr>\n";
    foreach ($row as $item) {
    echo "<td class='td2'>".($item !== null ? htmlentities($item, ENT_QUOTES):"&nbsp;")."</td>\n";
        } //foreach ends
        }// while ends
        echo "</table>\n";
       //echo " no of rows : ". oci_num_rows($stmt);
       //equivalent in pdo::prepare statement
       echo "no.of rows :".$count;

-1

सीधे प्रश्नों के लिए जहां मुझे एक विशिष्ट पंक्ति चाहिए, और यह जानना चाहिए कि क्या यह पाया गया था, मैं कुछ का उपयोग करता हूं जैसे:

function fetchSpecificRow(&$myRecord) {
    $myRecord = array();
    $myQuery = "some sql...";
    $stmt = $this->prepare($myQuery);
    $stmt->execute(array($parm1, $parm2, ...));
    if ($myRecord = $stmt->fetch(PDO::FETCH_ASSOC)) return 0;
    return $myErrNum;
}

-1

एक सरल उपाय है। यदि आप PDO का उपयोग अपने DB से इस तरह करते हैं:

try {
    $handler = new PDO('mysql:host=localhost;dbname=name_of_your_db', 'your_login', 'your_password'); 
    $handler -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} 
    catch (PDOException $e) {   
    echo $e->getMessage();
}

फिर, DB की क्वेरी होगी:

$query = $handler->query("SELECT id FROM your_table WHERE ...");

और अंत में, अपनी क्वेरी से मेल खाते पंक्तियों को इस तरह लिखना है

$amountOfRows = $query->rowcount();

यह मुझे ज्यादातर समय के लिए -1 क्यों देता है? भले ही डेटा हो। ।
ingus

-1

fetchColumn ()

उपयोग करना चाहते हैं, तो रिकॉर्ड की गिनती [effisien]

$sql   = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
$res   = $conn->query($sql);
$count = $res->fetchColumn(); // ex = 2

क्वेरी ()

उपयोग किया जाता है, तो डेटा और रिकॉर्ड की गिनती प्राप्त करना चाहते हैं [विकल्प]

$sql = "SELECT * FROM fruit WHERE calories > 100";
$res = $conn->query($sql);

if ( $res->rowCount() > 0) {

    foreach ( $res as $row ) {
        print "Name: {$row['NAME']} <br />";
    }

}
else {
    print "No rows matched the query.";
}

PDOStatement :: ROWCOUNT


आपको कभी ऐसा नहीं करना चाहिए । अधिक या कम बड़ी मेज पर यह सभी सर्वर मेमोरी को खा जाएगा और सर्वर को क्रैश कर देगा
आपका कॉमन सेंस

अब आपका उत्तर सिर्फ एक दर्जन मौजूदा उत्तरों की नकल करता है।
आपका कॉमन सेंस

-2

जब आप अपने mysql स्टेटमेंट में COUNT (*) बनाते हैं जैसे

$q = $db->query("SELECT COUNT(*) FROM ...");

आपकी mysql क्वेरी पहले से ही परिणाम की संख्या गिन रही है कि फिर से php में गिनती क्यों? अपने mysql का परिणाम पाने के लिए

$q = $db->query("SELECT COUNT(*) as counted FROM ...");
$nb = $q->fetch(PDO::FETCH_OBJ);
$nb = $nb->counted;

और $nbउस पूर्णांक को सम्‍मिलित करेंगे जिसे आपने अपने mysql कथन के साथ लिखने के लिए थोड़ा लंबा लिखा है, लेकिन जल्‍दी निष्पादित करने के लिए

संपादित करें: गलत पोस्ट के लिए खेद है, लेकिन जैसा कि कुछ उदाहरण में गिनती के साथ क्वेरी दिखाते हैं, मैं mysql परिणाम का उपयोग करने का सुझाव दे रहा था, लेकिन यदि आप sql fetchAll में गणना का उपयोग नहीं करते हैं () कुशल है, यदि आप एक चर में परिणाम बचाते हैं आप एक लाइन को ढीला नहीं करेंगे।

$data = $dbh->query("SELECT * FROM ...");
$table = $data->fetchAll(PDO::FETCH_OBJ);

count($table)पंक्ति की संख्या लौटाएगा और आप अभी भी परिणाम का उपयोग कर सकते हैं जैसे कि $row = $table[0] या एक का उपयोग करने के बादforeach

foreach($table as $row){
  print $row->id;
}

1
सवाल यह है कि जब आप अपने mysql स्टेटमेंट में COUNT (*) बनाते हैं तो गिनती कैसे प्राप्त करें
आपका कॉमन सेंस

-2

अंतिम क्वेरी के "WHERE" मानदंड में शामिल पंक्तियों की संख्या को पुनः प्राप्त करने के लिए सहायक फ़ंक्शन के साथ PDO वर्ग का कस्टम-निर्मित एक्सटेंशन है।

आपको अधिक 'हैंडलर' जोड़ने की आवश्यकता हो सकती है, हालाँकि, यह इस बात पर निर्भर करता है कि आप किस कमांड का उपयोग करते हैं। अभी यह केवल "FROM" या "UPDATE" का उपयोग करने वाले प्रश्नों के लिए काम करता है।

class PDO_V extends PDO
{
    private $lastQuery = null;

    public function query($query)
    {
        $this->lastQuery = $query;    
        return parent::query($query);
    }
    public function getLastQueryRowCount()
    {
        $lastQuery = $this->lastQuery;
        $commandBeforeTableName = null;
        if (strpos($lastQuery, 'FROM') !== false)
            $commandBeforeTableName = 'FROM';
        if (strpos($lastQuery, 'UPDATE') !== false)
            $commandBeforeTableName = 'UPDATE';

        $after = substr($lastQuery, strpos($lastQuery, $commandBeforeTableName) + (strlen($commandBeforeTableName) + 1));
        $table = substr($after, 0, strpos($after, ' '));

        $wherePart = substr($lastQuery, strpos($lastQuery, 'WHERE'));

        $result = parent::query("SELECT COUNT(*) FROM $table " . $wherePart);
        if ($result == null)
            return 0;
        return $result->fetchColumn();
    }
}

समस्या एक प्रयास के लायक नहीं है। इस तरह की संख्या की आवश्यकता इतनी कम है कि किसी को समर्पित विस्तार की आवश्यकता नहीं है। उल्लेख करने के लिए नहीं यह तैयार बयानों का समर्थन नहीं करता है - पीडीओ का उपयोग करने का एकमात्र कारण।
आपका कॉमन सेंस

-2

आप सबसे अच्छी विधि को एक पंक्ति या फ़ंक्शन में जोड़ सकते हैं, और आपके लिए नई क्वेरी ऑटो-जेनरेट की जा सकती है:

function getRowCount($q){ 
    global $db;
    return $db->query(preg_replace('/SELECT [A-Za-z,]+ FROM /i','SELECT count(*) FROM ',$q))->fetchColumn();
}

$numRows = getRowCount($query);

इस विधि में सबसे अच्छा कुछ नहीं। एक अतिरिक्त क्वेरी चलाने के लिए केवल यह जानने के लिए कि कितनी पंक्तियाँ वापस की गईं, बिल्कुल कोई मतलब नहीं है।
आपका कॉमन सेंस

-2
<table>
      <thead>
           <tr>
                <th>Sn.</th>
                <th>Name</th>
           </tr>
      </thead>
      <tbody>
<?php
     $i=0;
     $statement = $db->prepare("SELECT * FROM tbl_user ORDER BY name ASC");
     $statement->execute();
     $result = $statement->fetchColumn();
     foreach($result as $row) {
        $i++;
    ?>  
      <tr>
         <td><?php echo $i; ?></td>
         <td><?php echo $row['name']; ?></td>
      </tr>
     <?php
          }
     ?>
     </tbody>
</table>

1
यह एक वास्तविक बुरा विचार है। सभी पंक्तियों का चयन करना, यह बैंडविड्थ की एक बड़ी बर्बादी है।
नफीस

-2
function count_x($connect) {  
 $query = "  SELECT * FROM tbl WHERE id = '0' ";  
 $statement = $connect->prepare($query);  $statement->execute();  
 $total_rows = $statement->rowCount();  
 return $total_rows; 
}

-4

पैरामीटर का उपयोग करें array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL), अन्यथा शो -1:

यूसेन पैरामरो array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL), पाप एलो बिक्री -1

उदाहरण:

$res1 = $mdb2->prepare("SELECT clave FROM $tb WHERE id_usuario='$username' AND activo=1 and id_tipo_usuario='4'", array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$res1->execute();

$count=$res1->rowCount();
echo $count;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.