2013-02-04 16 views
8

OK, więc szukam schludnego i krótkiego sposobu zliczania liczby wierszy z zapytania SELECT za pomocą Doctrine DBAL.Używanie Doctrine DBAL do policzenia liczby wierszy z zapytania SELECT

Wiem, że mogłem SELECT COUNT(*), ale muszę przesortować tablicę podczas pobierania wyników. Alternatywnie zasugerowano, aby zajrzeć do getScalarResult(). Ale nie mogę znaleźć żadnej dokumentacji na ten temat, poza DQL (który jest innym projektem).

Jaki jest najmilszy sposób na zrobienie tego? Chyba dlatego, że jestem przyzwyczajony do wielkiego atrybutu MySQLI num_rows!

+0

lektury http://stackoverflow.com/questions/883365/row-count-with-pdo, który jest bardzo podobny do tego, jak funkcjonuje DBAL doktryny. – fyrye

Odpowiedz

10

Właściwie myślałem, że wyglądała naprawdę ciężko, ale ja po prostu natknąłem się na to Count Records Returned MySQL Doctrine

Więc sposób, aby zrobić to metodą rowCount().

Przykład:

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

+5

Ma to sens tylko wtedy, gdy trzeba pobrać rekordy. W przeciwnym razie pobieranie wszystkich rekordów tylko po to, aby policzyć je w PHP, jest kiepskim pomysłem. – eReiche

+5

Należy pamiętać, że wartość rowCount nie jest w 100% zaufana dla wszystkich baz danych, zachowanie może się zmienić w zależności od bazy danych, której używasz. Ten komentarz jest kopiowany wklejony z kodu źródłowego metody. *** Jeśli ostatnia instrukcja SQL wykonana przez powiązany obiekt instrukcji była instrukcją SELECT, niektóre bazy danych mogą zwracać liczbę wierszy zwróconych przez tę instrukcję. Jednak zachowanie to nie jest gwarantowane dla wszystkich baz danych i nie powinno się na nich polegać w przypadku aplikacji przenośnych. [link] (http://www.doctrine-project.org/api/dbal/2.4/source-class-Doctrine.DBAL.Driver.Statement.html#111-123) *** – casivaagustin

15

Innym sposobem, aby to zrobić z doktryną DBAL jest uzyskać zliczania jako pole i powrócić kolumnie

$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); 
Powiązane problemy