$sql = "SELECT count(*) FROM `table` WHERE foo = ?";
$result = $con->prepare($sql);
$result->execute([$bar]);
$number_of_rows = $result->fetchColumn();
Ce n'est pas la façon la plus élégante de le faire, en plus cela implique une requête supplémentaire.
PDO a PDOStatement::rowCount()
, ce qui n'est apparemment pas travailler dans MySql. Quelle douleur.
À partir du document PDO :
Pour la plupart des bases de données, PDOStatement::rowCount() ne renvoie pas le nombre de lignes affectées par une instruction SELECT. Au lieu de cela, utilisezPDO::query() pour émettre une instruction SELECTCOUNT(*) avec les mêmes prédicats que votre instruction SELECT prévue, puis utilisezPDOStatement::fetchColumn() pour récupérer le nombre de lignes qui seront renvoyées. Votre application peut alors effectuer l'action correcte.
EDIT :l'exemple de code ci-dessus utilise une instruction préparée, qui est dans de nombreux cas probablement inutile pour compter les lignes, donc :
$nRows = $pdo->query('select count(*) from blah')->fetchColumn();
echo $nRows;