2010-02-21 7 views
13

Ich habe dies:die Anzahl der Datensätze aus einer Select-Anweisung

$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$mdbFilename", $username, $password); 

$sql = "SELECT * FROM this_table"; 

$stmt = $dbh->query($sql); 

//num of rows? 

Wie bekomme ich die Anzahl der Zeilen aus dieser SELECT-Anweisung zurückgegeben?

Dank all

Antwort

5

Ich habe eine Lösung, mit fetchAll gefunden und dann auf dieser Array Zählung - das ist, was MySQL sowieso intern tut, ein wenig ineffizient, aber es funktioniert für mich.

$q = $db->query("SELECT ..."); 
$rows = $q->fetchAll(); 
$rowCount = count($rows); 

Aus einer anderen Frage Chad sofern diese Einsicht:

Es scheint, als ob der einzige Grund dies möglich war, mit MySQL ist, weil es intern all Reihen Ergebnis geholt und sie gepuffert, um be kann Ihnen diese Informationen geben. Siehe mysql_unbuffered_query(). Wenn Sie diese Funktion anstelle von mysql_query() verwenden, funktioniert die Funktion mysql_num_rows() nicht. Wenn Sie wirklich die Anzahl der Zeilen wissen müssen, während PDO verwenden, können Sie alle Zeilen von PDO in ein Array abrufen und dann verwenden count().

Hope das ist nützlich für jemanden.

+0

Hallo, haben Sie einen Link zu der Frage, die Sie erwähnen? Danke tho – James

+15

Dies ist eine ** BAD ** Idee. Was ist, wenn Ihr SELECT Millionen von Zeilen zurückgibt? – Jrgns

+0

Wie wäre Count (*) besser in der Leistung? – devXen

8

SELECT count(*) FROM this_table ist eine Option ...

In Bezug auf rowCount:

PDOStatement :: rowCount() gibt die Anzahl der Zeilen, die von der letzten DELETE, INSERT oder UPDATE-Anweisung betroffen wird vom entsprechenden PDOStatement-Objekt ausgeführt.

Wenn die letzte SQL-Anweisung durch den zugehörigen PDOStatement ausgeführt eine SELECT-Anweisung war, können einige Datenbanken geben die Anzahl der Zeilen, die von dieser Anweisung zurückgegeben. **

Dieses Verhalten ist jedoch nicht für alle Datenbanken garantiert und sollte nicht für portable Anwendungen verlässlich sein.

+0

Ich möchte keine andere Abfrage ausführen. – Abs

+1

Dieser Link kann eine Hilfe sein: http://php.net/manual/en/pdostatement.rowcount.php –