$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.
DOP tiene PDOStatement::rowCount()
, que aparentemente no funciona en MySql. Que dolor.
Desde el 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, use PDO :: query () para emitir una declaración SELECT COUNT (*) 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. Su aplicación puede realizar la acción correcta.
EDITAR: El ejemplo de código anterior usa una declaración preparada, que en muchos casos probablemente no sea necesaria para contar filas, por lo tanto:
$nRows = $pdo->query('select count(*) from blah')->fetchColumn();
echo $nRows;
fetchColumn()
devuelve una cadena "1234" ... su EDIT tieneecho count($nRows);
-count()
es una función de matriz: P. También recomendaría escribir el resultado desdefetchColumn()
un entero.$count = (int) $stmt->fetchColumn()
Como escribí anteriormente en una respuesta a una pregunta similar , la única razón
mysql_num_rows()
funcionó es porque estaba recuperando internamente todas las filas para brindarle esa información, incluso si no le parecía.Entonces, en PDO, sus opciones son:
FOUND_ROWS()
función de MySQL .fetchAll()
función PDO para buscar todas las filas en una matriz, luego úselacount()
.SELECT COUNT(*)
, como sugirió karim79.fuente
Como suele suceder, esta pregunta es confusa como el infierno. La gente viene aquí con dos tareas diferentes en mente:
Son dos tareas absolutamente diferentes que no tienen nada en común y que no pueden resolverse con la misma función. Irónicamente, para ninguno de ellos
PDOStatement::rowCount()
se debe usar la función real .Veamos porque
Contando filas en la tabla
Significa que ya lo hiciste mal. Usar
mysql_num_rows()
orowCount()
contar el número de filas en la tabla es un verdadero desastre en términos de consumo de los recursos del servidor. Una base de datos tiene que leer todas las filas del disco, consumir la memoria en el servidor de la base de datos, luego enviar todo este montón de datos a PHP, consumiendo también la memoria del proceso de PHP, cargando su servidor sin ninguna razón.Además, seleccionar filas solo para contarlas simplemente no tiene sentido. En su lugar,
count(*)
se debe ejecutar una consulta. La base de datos contará los registros del índice, sin leer las filas reales y luego solo se devolverá una fila.Para este propósito, el código sugerido en la respuesta aceptada es justo.
Contando el número de filas devueltas.
El segundo caso de uso no es tan desastroso como bastante inútil: en caso de que necesite saber si su consulta devolvió algún dato, ¡siempre tiene los datos en sí!
Diga, si está seleccionando solo una fila. Muy bien, puedes usar la fila obtenida como una bandera:
En caso de que necesite obtener muchas filas, puede usar
fetchAll()
.Sí, por supuesto, para el primer caso de uso sería el doble de malo. Pero como ya aprendimos, simplemente no seleccione las filas solo para contarlas, ni con
rowCount()
nifetchAll()
.Pero en caso de que realmente vaya a usar las filas seleccionadas, no hay nada de malo en usarlas
fetchAll()
. Recuerde que en una aplicación web nunca debe seleccionar una gran cantidad de filas. Sólo las filas que se utilizan realmente en una página web deben ser seleccionados, por lo tanto, usted tiene que usarLIMIT
,WHERE
o una cláusula similar en su SQL. Y para una cantidad tan moderada de datos está bien usarlofetchAll()
. Y nuevamente, solo use el resultado de esta función en la condición:Y, por supuesto, será una locura absoluta ejecutar una consulta adicional solo para saber si su otra consulta devolvió alguna fila, como se sugiere en las dos respuestas principales.
Contando el número de filas en un conjunto de resultados grande
En un caso tan raro cuando necesita seleccionar una gran cantidad real de filas (en una aplicación de consola, por ejemplo), debe usar una consulta sin búfer para reducir la cantidad de memoria utilizada. Pero este es el caso real cuando
rowCount()
no estará disponible , por lo tanto, no hay uso para esta función también.Por lo tanto, ese es el único caso de uso cuando posiblemente necesite ejecutar una consulta adicional, en caso de que necesite conocer una estimación cercana para el número de filas seleccionadas.
fuente
Esto es muy tarde, pero me encontré con el problema y hago esto:
Es realmente simple y fácil. :)
fuente
Terminé usando esto:
fuente
Esta publicación es antigua, pero obtener recuento de filas en php con PDO es simple
fuente
Esta es una publicación antigua, pero se frustra al buscar alternativas. Es muy desafortunado que PDO no tenga esta característica, especialmente porque PHP y MySQL tienden a ir de la mano.
Hay un defecto desafortunado en el uso de fetchColumn () ya que ya no puede usar ese conjunto de resultados (efectivamente) ya que fetchColumn () mueve la aguja a la siguiente fila. Entonces, por ejemplo, si tiene un resultado similar a
Si usa fetchColumn () puede descubrir que hay 3 frutas devueltas, pero si ahora recorre el resultado, solo tiene dos columnas. El precio de fetchColumn () es la pérdida de la primera columna de resultados solo para encontrar fuera cuántas filas fueron devueltas. Eso lleva a una codificación descuidada y resultados totalmente corregidos por errores si se implementa.
Así que ahora, usando fetchColumn () debe implementar una llamada y una consulta MySQL completamente nuevas solo para obtener un nuevo conjunto de resultados de trabajo. (que espero que no haya cambiado desde su última consulta), lo sé, poco probable, pero puede suceder. Además, la sobrecarga de consultas dobles en todas las validaciones de recuento de filas. Lo que para este ejemplo es pequeño, pero analizar 2 millones de filas en una consulta unida, no es un precio agradable a pagar.
Me encanta PHP y apoyo a todos los involucrados en su desarrollo, así como a la comunidad en general que usa PHP a diario, pero realmente espero que esto se aborde en futuras versiones. Esta es 'realmente' mi única queja con PHP PDO, que de lo contrario es una gran clase.
fuente
Respondiendo esto porque me atrapé con eso ahora sabiendo esto y tal vez sea útil.
Tenga en cuenta que no puede obtener resultados dos veces. Debe guardar el resultado de la búsqueda en la matriz, obtener el recuento de filas
count($array)
y generar resultados conforeach
. Por ejemplo:fuente
Si solo desea obtener un recuento de filas (no los datos), es decir. usando COUNT (*) en una declaración preparada, entonces todo lo que necesita hacer es recuperar el resultado y leer el valor:
En realidad, recuperar todas las filas (datos) para realizar un recuento simple es un desperdicio de recursos. Si el conjunto de resultados es grande, su servidor puede ahogarse en él.
fuente
Eche un vistazo a este enlace: http://php.net/manual/en/pdostatement.rowcount.php ¡ No se recomienda usar rowCount () en las instrucciones SELECT!
fuente
Para usar variables dentro de una consulta, debe usar
bindValue()
obindParam()
. Y no concatene las variables con" . $variable . "
GL
fuente
Cuando se trata de mysql cómo contar u obtener cuántas filas en una tabla con PHP PDO , uso esto
los créditos van a Mike @ codeofaninja.com
fuente
Una línea rápida para obtener la primera entrada devuelta. Esto es bueno para consultas muy básicas.
Referencia
fuente
Intenté
$count = $stmt->rowCount();
con Oracle 11.2 y no funcionó. Decidí usar un bucle for como se muestra a continuación.fuente
Para consultas directas donde quiero una fila específica y quiero saber si se encontró, utilizo algo como:
fuente
Existe una solución simple. Si usa PDO, conéctese a su base de datos de esta manera:
Entonces, la consulta a DB será:
Y finalmente, para contar las filas que coinciden con su consulta, escriba así
fuente
fetchColumn ()
se usa si desea obtener el recuento de registros [effisien]
consulta()
se usa si desea recuperar datos y conteo de registros [opciones]
PDOStatement :: rowCount
fuente
cuando haces un COUNT (*) en tu declaración mysql como en
su consulta mysql ya cuenta el número de resultados ¿por qué contar nuevamente en php? para obtener el resultado de tu mysql
y
$nb
contendrá el número entero que ha contado con su declaración mysql un poco largo para escribir pero rápido para ejecutarEditar: perdón por la publicación incorrecta, pero como ejemplo muestra la consulta con count in, estaba sugiriendo usar el resultado de mysql, pero si no usa el recuento en sql fetchAll () es eficiente, si guarda el resultado en una variable No perderás una línea.
count($table)
devolverá el número de fila y aún puede usar el resultado después de dar like$row = $table[0]
o usar unforeach
fuente
Aquí hay una extensión personalizada de la clase PDO, con una función auxiliar para recuperar el número de filas incluidas por el criterio "WHERE" de la última consulta.
Sin embargo, es posible que deba agregar más 'controladores', dependiendo de los comandos que use. En este momento solo funciona para consultas que usan "FROM" o "UPDATE".
fuente
Puede combinar el mejor método en una línea o función, y hacer que la nueva consulta se genere automáticamente para usted:
fuente
fuente
fuente
Use el parámetro
array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)
, de lo contrario muestre -1:Usen parametro
array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)
, sin ello venta -1ejemplo:
fuente