$sql = "SELECT count(*) FROM `table` WHERE foo = ?";
$result = $con->prepare($sql);
$result->execute([$bar]);
$number_of_rows = $result->fetchColumn();
No es la forma más elegante de hacerlo, además implica una consulta adicional.
PDO tiene PDOStatement::rowCount()
, que aparentemente no trabajar en MySql. Que dolor.
Del documento PDO:
Para la mayoría de las bases de datos, PDOStatement::rowCount() no devuelve el número de filas afectadas por una instrucción SELECT. En su lugar, utilice PDO::query() para emitir una declaración SELECTCOUNT(*) con los mismos predicados que su declaración SELECT deseada, luego use PDOStatement::fetchColumn() para recuperar el número de filas que se devolverán. Entonces su aplicación puede realizar la acción correcta.
EDITAR:el ejemplo de código anterior utiliza una declaración preparada, que en muchos casos probablemente no sea necesaria para el propósito de contar filas, por lo que:
$nRows = $pdo->query('select count(*) from blah')->fetchColumn();
echo $nRows;