$sql = "SELECT count(*) FROM `table` WHERE foo = ?";
$result = $con->prepare($sql);
$result->execute([$bar]);
$number_of_rows = $result->fetchColumn();
Não é a maneira mais elegante de fazer isso, além de envolver uma consulta extra.
O PDO tem
PDOStatement::rowCount()
, que aparentemente não trabalhar no MySql. Que dor. Do documento PDO:
Para a maioria dos bancos de dados, PDOStatement::rowCount() não retorna o número de linhas afetadas por uma instrução SELECT. Em vez disso, use PDO::query() para emitir uma instrução SELECTCOUNT(*) com os mesmos predicados que sua instrução SELECT pretendida e, em seguida, use PDOStatement::fetchColumn() para recuperar o número de linhas que serão retornadas. Seu aplicativo pode então executar a ação correta.
EDIT:O exemplo de código acima usa uma instrução preparada, que em muitos casos é provavelmente desnecessária para fins de contagem de linhas, então:
$nRows = $pdo->query('select count(*) from blah')->fetchColumn();
echo $nRows;