La única forma en que las bases de datos pueden darle un recuento para el número de filas es ejecutando la consulta y contando el número de filas.
La extensión mysql utiliza un modo de consulta almacenado de forma predeterminada que hace que todo el conjunto de datos se almacene en la memoria antes de devolver el control a PHP y puede comenzar a procesar las filas.
PDO utiliza un modo sin búfer por defecto, lo que conduce a una latencia más baja en el tiempo de carga de la página y generalmente es lo que desea. La compensación es que rowCount() no devolverá información válida hasta que se haya recuperado todo el conjunto de datos.
Entonces, ¿cómo se obtiene ese conteo?
Fácil:
$q = $db->query("SELECT ...");
$rows = $q->fetchAll();
$rowCount = count($rows);
echo "There are $rowCount rows\n";
foreach ($rows as $row) {
print_r($row);
}
Pero eso apesta porque consulta todas las filas en la delantera y hace que mi carga de la página más lenta, la extensión MySQL de edad no tenía este problema !?
Pero eso es exactamente lo que la antigua extensión de mysql está haciendo bajo las sábanas; es la única forma de lograrlo.
No estoy seguro de lo que está buscando, ¿está llamando a affected_rows() y vuelve a cero para una instrucción seleccionada? Una selección no afecta ninguna fila. –
Estoy buscando un equivalente PDO de mysql_num_rows() –
en el último año, ¿cómo lo resolvió? – Strae