2013-02-04 8 views
8

OK, also bin ich auf der Suche nach einem sauberen und kurzen Weg, um die Anzahl der Zeilen aus einer SELECT-Abfrage mit Doctrine DBAL zu zählen.Mit Doctrine DBAL, um die Anzahl der Zeilen von SELECT-Abfrage zu zählen

Ich weiß, dass ich könnte SELECT COUNT(*) aber dann muss ich durch das Array sortieren, wenn ich Ergebnisse abrufen. Alternativ wurde vorgeschlagen, in getScalarResult() zu suchen. Aber ich kann keine Dokumentation darüber finden, außer in DQL (was ein anderes Projekt ist).

Was ist der beste Weg, dies zu tun? Ich schätze, das liegt daran, dass ich an das großartige MySQLI-Attribut num_rows gewöhnt bin!

+0

Lesen vorschlagen http://stackoverflow.com/questions/883365/row-count-with-pdo, was sehr ähnlich ist wie Doktrin DBAL funktioniert. – fyrye

Antwort

10

Eigentlich dachte ich, dass ich wirklich hart ausgesehen hatte, aber ich kam gerade diese über Count Records Returned MySQL Doctrine

So wie es ist über die rowCount() Methode zu tun.

Beispiel:

$num_rows = $conn->executeQuery("SELECT * FROM users")->rowCount();

+5

Das macht nur Sinn, wenn Sie die Datensätze sowieso abholen müssen. Andernfalls ist das Abrufen aller Datensätze, nur um sie in PHP zu zählen, eine schlechte Idee, wenn es um die Leistung geht. – eReiche

+5

Beachten Sie, dass rowCount für alle Datenbanken nicht 100% vertrauenswürdig ist. Das Verhalten kann sich abhängig von der verwendeten Datenbank ändern. Dieser Kommentar wird aus dem Quellcode der Methode kopiert. *** Wenn die letzte SQL-Anweisung, die vom zugeordneten Statement-Objekt ausgeführt wurde, eine SELECT-Anweisung war, können einige Datenbanken die Anzahl der von dieser Anweisung zurückgegebenen Zeilen zurückgeben. Dieses Verhalten ist jedoch nicht für alle Datenbanken garantiert und sollte nicht für portable Anwendungen verlässlich sein. [link] (http://www.doctrine-project.org/api/dbal/2.4/source-class-Doctrine.DBAL.Driver.Statement.html#111-123) *** – casivaagustin

15

andere Möglichkeit, dies mit Lehre DBAL zu tun, ist die Zählung als ein Feld zu erhalten und geben die Spalte

$sql = "SELECT count(*) AS Total FROM myTable WHERE myId = :myId"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindValue('myId', $myId, PDO::PARAM_INT); 
    $stmt->execute(); 
    $count = $stmt->fetchColumn(0); 
Verwandte Themen