$sql = "SELECT count(*) FROM `table` WHERE foo = ?";
$result = $con->prepare($sql);
$result->execute([$bar]);
$number_of_rows = $result->fetchColumn();
Není to nejelegantnější způsob, jak to udělat, a navíc to vyžaduje další dotaz.
PDO má PDOStatement::rowCount()
, což zřejmě ne pracovat v MySql. Jaká bolest.
Z dokumentu PDO:
U většiny databází PDOStatement::rowCount() nevrací počet řádků ovlivněných příkazem SELECT. Místo toho použijte PDO::query() k zadání příkazu SELECTCOUNT(*) se stejnými predikáty jako zamýšlený příkaz SELECT, poté použijte PDOStatement::fetchColumn() k získání počtu řádků, které budou vráceny. Vaše aplikace pak může provést správnou akci.
EDIT:Výše uvedený příklad kódu používá připravený příkaz, který je v mnoha případech pravděpodobně zbytečný pro účely počítání řádků, takže:
$nRows = $pdo->query('select count(*) from blah')->fetchColumn();
echo $nRows;