Al usar MySQL, PDOStatement::rowCount()
devuelve el número de filas en el conjunto de resultados. En realidad llamadas
el mysql_num_rows()
subyacente Función C para completar el valor. No hay necesidad de múltiples consultas o cualquier otro juego.
Esto es cierto para MySQL, pero no se puede confiar en este comportamiento para otros controladores (otros pueden admitirlo, pero no está garantizado, no estoy lo suficientemente familiarizado con otros como para decirlo con seguridad). Pero dado que su pregunta se refiere específicamente a MySQL, debería servir para sus propósitos.