2010-04-23 48 views
13

PDO aparentemente no tiene medios para contar la cantidad de filas devueltas de una consulta de selección (mysqli tiene la variable num_rows).PHP PDO - Num Filas

¿Hay alguna manera de hacer esto, salvo utilizar count($results->fetchAll())?

+1

posible duplicado de http://stackoverflow.com/questions/460010/work-around-for-php5s-pdo-rowcount-mysql-issue - Esta pregunta es la misma que la suya. La respuesta aceptada allí es lo que quieres. – zombat

+5

Vi esa pregunta, pero la respuesta apesta. Ejecutar una segunda consulta al db solo para ver el número de filas que ahora se está almacenando en un conjunto de registros es realmente tonto. – Ian

Respuesta

12

De acuerdo con el manual, existe un método PDOStatement->rowCount; pero no debe ser utilizado (citando):

Para la mayoría de las bases de datos, PDOStatement::rowCount() no devolver el número de filas afectadas por una declaración SELECT.
su lugar, utilice PDO::query() a emitir una declaración SELECT COUNT(*) con los mismos predicados como su intención SELECT comunicado, a continuación, utilizar PDOStatement::fetchColumn() a recuperar el número de filas que ser devueltos.
Su aplicación puede entonces realizar la acción correcta.


Si ya tiene un conjunto de registros, y desea saber cuántas líneas están en él, que tendrá que buscar los datos, utilizando uno de los métodos fetch*; y use la cuenta, como sugirió.

+7

Sí, así es mi problema. ¿Cómo es posible que PDO * no * tenga una función num_rows? Todos los otros conectores db lib lo tienen. – Ian

+0

Si tiene los datos, puede contar usted mismo el número de líneas que contiene * (como sugirió) *; así que supongo que no hay una necesidad * real * de un método que lo haga ... –

+5

Tomar todos los datos solo por el hecho de contarlos, entonces tirar esa matriz es un desperdicio, especialmente si se trata de una gran variedad. – Ian

0

Otra opción que puede estar más cerca de la variable num_rows en y la función C API correspondiente mysql_num_rows(). Es utilizar la función MySQL FOUND_ROWS() que devuelve la misma información sin tener que volver a contar todos los registros en el resultado.

Ejemplo:

$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn() 
+0

esta respuesta no tiene sentido hoy en día porque puede tener el recuento de la manera normal –

2

Aunque DOP aparentemente tiene todos los medios para contar el número de filas devueltas desde una consulta de selección para MySQL, lo que es más importante es que hay ningún uso para una función de este tipo de El primer lugar.

Cada vez que tenga una idea para usar rowCount() para una consulta SELECT, sería superfluo o incluso dañino. Ver PDO rowCount():

  • en caso de tener los datos ya seleccionados, esta función es superfluo ya que simplemente puede contar con los datos
  • en caso de que desee utilizar esta función para obtener el recuento única, sería perjudicial, como nunca debe seleccionar datos solo para contarlo. Seleccione solo recuento, usando SELECT count (*) en su lugar.
+2

¿Leyó siquiera la respuesta aceptada a esta pregunta? Desde la documentación de PDO: "Si la última instrucción SQL ejecutada por PDOStatement asociada fue una instrucción SELECT, algunas bases de datos pueden devolver el número de filas devueltas por esa declaración. Sin embargo, este comportamiento no se garantiza para todas las bases de datos y no debe confiarse en él aplicaciones portátiles. " – Ian

+3

Bueno, si está solicitando la aplicación portátil, no etiquete su pregunta con mysql. –

+0

¿cómo voy a contar entonces? Estoy usando una consulta PHP MySQL más tarde en el documento HTML para mostrar los datos de la base de datos, pero el elemento en el que quiero mostrar el conteo viene antes de buscar y mostrar los datos ??? – Anthony