2010-02-21 16 views
13

tengo esto:el número de filas de una instrucción 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? 

¿Cómo consigo el número de filas devueltas desde esa instrucción SELECT?

Gracias a todos

Respuesta

5

He encontrado una solución, usando fetchAll y luego usando count en esta matriz, que es lo que MySQL hace de todos modos internamente, un poco ineficiente pero funciona para mí.

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

De otra pregunta Chad proporcionan esta idea:

Parece como si la única razón por la esto era posible con MySQL es porque internamente fue a buscar todos los filas de resultados y los amortiguada, a ser capaz de darle esta información. Ver mysql_unbuffered_query(). Si usa esa función en lugar de mysql_query(), la función mysql_num_rows() no funcionará. Si realmente necesita para saber el número de filas mientras usa PDO, puede obtener todas las filas de PDO en una matriz y luego use count().

Espero que esto sea útil para alguien.

+0

Hola, ¿tiene un enlace a la pregunta que menciona? Gracias a – James

+15

Esta es una idea ** MALA **. ¿Qué pasa si su SELECT devuelve millones de filas? – Jrgns

+0

¿Cómo sería el recuento (*) mejor en el rendimiento? – devXen

8

SELECT count(*) FROM this_table es una opción ...

En cuanto rowCount:

PDOStatement :: rowCount() devuelve el número de filas afectadas por la última, INSERT, DELETE o UPDATE ejecutado por el objeto PDOStatement correspondiente.

Si la última instrucción SQL ejecutada por la PDOStatement asociada fue una instrucción SELECT, algunas bases de datos pueden devolver el número de filas devueltas por esa instrucción. **

Sin embargo, este comportamiento no se garantiza para todas las bases de datos y no se debe confiar para las aplicaciones portátiles.

+0

No quiero ejecutar otra consulta. – Abs

+1

Este enlace puede ser de alguna ayuda: http://php.net/manual/en/pdostatement.rowcount.php –

Cuestiones relacionadas