2013-02-04 14 views
8

OK, quindi sto cercando un modo accurato e breve per contare il numero di righe da una query SELECT utilizzando Doctrine DBAL.Utilizzo di Doctrine DBAL per contare il numero di righe dalla query SELECT

So che potrei SELECT COUNT(*) ma poi ho bisogno di ordinare attraverso la matrice quando recupero risultati. In alternativa, è stato suggerito di cercare su getScalarResult(). Ma non riesco a trovare alcuna documentazione su questo, tranne che in DQL (che è un progetto diverso).

Quindi qual è il modo migliore per farlo? Immagino sia perché sono abituato al grande attributo MySQLI num_rows!

+0

suggerire la lettura http://stackoverflow.com/questions/883365/row-count-with-pdo che è molto simile a come funziona la DBAL della doctrina. – fyrye

risposta

10

In realtà ho pensato che avevo guardato davvero difficile, ma ho appena imbattuto in questo Count Records Returned MySQL Doctrine

Quindi il modo per farlo è attraverso il metodo rowCount().

Esempio:

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

+5

Questo ha senso solo se è comunque necessario recuperare i record. Altrimenti il ​​recupero di tutti i record solo per contarli in PHP è una cattiva idea per quanto riguarda le prestazioni. – eReiche

+5

Si tenga presente che rowCount non è affidabile al 100% per tutti i database, il comportamento potrebbe cambiare in base al database in uso. Questo commento è copia incollato dal codice sorgente del metodo. *** Se l'ultima istruzione SQL eseguita dall'oggetto Statement associato era un'istruzione SELECT, alcuni database potrebbero restituire il numero di righe restituite da tale istruzione. Tuttavia, questo comportamento non è garantito per tutti i database e non dovrebbe essere invocato per le applicazioni portatili. [Link] (http://www.doctrine-project.org/api/dbal/2.4/source-class-Doctrine.DBAL.Driver.Statement.html#111-123) *** – casivaagustin

15

Un altro modo per fare questo con Doctrine DBAL è quello di ottenere il conteggio come un campo e restituire la colonna

$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); 
Problemi correlati