Ao usar o MySQL,
PDOStatement::rowCount()
retorna o número de linhas no conjunto de resultados. Na verdade, ele chamada
o mysql_num_rows()
subjacente Função C para preencher o valor. Não há necessidade de várias consultas ou qualquer outra brincadeira. Isso é verdade para o MySQL, mas esse comportamento não pode ser confiável para outros drivers (outros podem suportá-lo, mas não é garantido, não estou familiarizado com os outros o suficiente para dizer com certeza de qualquer maneira). Mas como sua pergunta diz respeito especificamente ao MySQL, ela deve servir aos seus propósitos.