2010-02-21 9 views
13

ho questo:ottenere il numero di righe da un'istruzione Select

$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? 

Come faccio ad avere il numero di righe restituite da quel SELECT?

Grazie a tutti

risposta

5

Ho trovato una soluzione, usando fetchAll e quindi usando il conteggio su questo array - che è ciò che MySQL fa comunque internamente, un po 'inefficiente ma funziona per me.

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

Da un'altra domanda Chad disponibile questa intuizione:

Sembra che l'unica ragione era possibile con MySQL è perché prelevato internamente tutte le righe dei risultati e tamponato, ad essere in grado di darti questa informazione. Vedi mysql_unbuffered_query(). Se si utilizza la funzione invece di mysql_query(), la funzione mysql_num_rows() non funzionerà. Se davvero è necessario conoscere il numero di righe mentre utilizzando PDO, è possibile recuperare tutte le righe da PDO in un array e quindi utilizzare count().

Spero che questo sia utile a qualcuno.

+0

Ciao, hai un link alla domanda che hai citato? Grazie mille – James

+15

Questa è un'idea ** BAD **. Cosa succede se il tuo SELECT restituisce milioni di righe? – Jrgns

+0

In che modo Count (*) potrebbe essere migliore nelle prestazioni? – devXen

8

SELECT count(*) FROM this_table è un'opzione ...

Per quanto riguarda rowCount:

PDOStatement :: rowCount() restituisce il numero di righe interessate dall'ultima DELETE, INSERT o UPDATE eseguito dall'oggetto PDOStatement corrispondente.

Se l'ultima istruzione SQL eseguita dalla PDOStatement associata 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 deve essere considerato affidabile per le applicazioni portatili.

+0

Non voglio eseguire un'altra query. – Abs

+1

Questo link potrebbe essere di aiuto: http://php.net/manual/en/pdostatement.rowcount.php –

Problemi correlati