registros - rowcount php
Solución para el problema de MySQL de PHP5 con el número de rowCount MySQL (3)
Recientemente comencé a trabajar en un nuevo proyecto usando PHP5 y quiero usar sus clases de PDO para él. El problema es que el controlador MySQL PDO no admite rowCount () por lo que no hay forma de ejecutar una consulta y luego obtener el número de filas afectadas, o las filas devueltas, que es un problema bastante grande en lo que a mí respecta. Me preguntaba si alguien más ha tratado esto antes y qué ha hecho para evitarlo. Tener que hacer un fetch () o fetchAll () para comprobar si alguna de las filas se vieron afectadas o devueltas parece un hack para mí, prefiero hacer $ stmt-> numRows () o algo similar.
Esta pregunta se basa en varias suposiciones falsas y una declaración desactualizada.
En primer lugar, no confunda el número de filas afectadas y seleccionadas . PDO apoyó a la primera incluso en el ''09.
Hablando de la cantidad de filas devueltas por la instrucción SELECT, simplemente no necesitas ese número. La información que tienes es suficiente.
Y sí, hoy en día rowCount()
admite también el número de filas seleccionadas de mysql. Pero de nuevo, de todos modos, no necesita ese número en una aplicación web promedio.
Para aquellos de ustedes que usan procedimientos almacenados de MySQL, esta solución no es realmente factible. Lo que le sugiero que haga es hacer que su procedimiento almacenado cree dos conjuntos de filas. El primero contendrá una fila y una columna, que contiene el número de registros. El segundo será el conjunto de registros que usará para obtener esa cantidad de filas.
La cantidad de filas ilimitadas puede ser SELECT COUNT(*)
con la misma cláusula WHERE
exacta que el segundo conjunto de filas sin las cláusulas LIMIT
/ OFFSET
.
Otra idea podría ser crear una tabla temporal. Use su instrucción SELECT
para rellenar la tabla temporal. Luego puede usar SELECT COUNT(*) FROM tmpTable
para su primer conjunto de filas y SELECT * FROM tmpTable
para su segundo.
Puede emitir una consulta SELECT FOUND_ROWS()
justo después de la consulta SELECT
original para obtener el recuento de filas.
$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
Ver también: MySQL Docs en FOUND_ROWS ()