registros num contar affected php mysql sql-server pdo mysql-num-rows

php - contar - PDO equivalente a mysql_num_rows o mssql_num_rows



select count mysql php pdo (2)

Entonces, con la ayuda de todos, esto es lo que construí.

function getRowsAffected() { $rawStatement = explode(" ", $this->query); $statement = strtoupper($rawStatement[0]); if ($statement == ''SELECT'' || $statement == ''SHOW'') { $countQuery = preg_replace(''/(SELECT|SHOW)(.*)FROM/i'', "SELECT count(*) FROM", $this->query); $countsth = $this->pdo->prepare($countQuery); if ($countsth->execute()) { $this->rowsaffected = $countsth->fetchColumn(); } else { $this->rowsaffected = 0; } } return $this->rowsaffected; }

$ this-> rowsaffected ya se está actualizando en la fase de ejecución si la instrucción es INSERT, UPDATE o DELETE con $ sth-> rowCount (), por lo que solo necesité ejecutar esta segunda consulta en SELECT y SHOWS.

if ($statement == ''INSERT'' || $statement == ''UPDATE'' || $statement == ''DELETE'') { $this->rowsaffected = $this->sth->rowCount(); }

Sin embargo, me siento mal, porque tal como mencioné en mi pregunta, que estaba buscando una solución general, parece que me encontré con una solución específica que me funciona porque el código ya pide el número de filas que usan una función. Si el código estaba haciendo esto:

if (mysql_num_rows($result) > 0) {

entonces esta solución aún crearía trabajo actualizando todas las instancias para usar esa función personalizada.

Sé que esta pregunta ya se hizo antes, pero parece que las soluciones han sido específicas del problema presentado.

Tengo una base de código con cientos de instancias donde se usa mssql_num_rows.

Ejemplo de código:

$db->execute($sql); if ($db->getRowsAffected() > 0) { $total = $db->fetch();

En la clase de db:

$this->rowsaffected = mssql_num_rows($this->query_result);

  • No puedo crear un SELECT count(*) FROM table genérico de SELECT count(*) FROM table consultas de SELECT count(*) FROM table ya que tengo demasiadas declaraciones de selección específicas.
  • Podría ejecutar un preg_replace para eliminar todo entre SELECT and FROM y luego reemplazar con un COUNT(*) y ejecutar una segunda consulta, pero esto supone que todas las consultas se configuran de cierta manera.
  • Podría fetchAll primero y luego count() los resultados, pero eso significa actualizar todas las instancias de las declaraciones if.

Entonces, ¿cuál es el mejor reemplazo para una función * _num_rows si las personas están actualizando su código a PDO? No es algo que resuelve un problema específico, sino algo que reemplaza la funcionalidad de * _num_rows. Si eso no es posible, ¿qué permitió que fuera posible antes?


Si desea contar las filas, puede hacer esto con PDO:

$sql = ''select * from users''; $data = $conn->query($sql); $rows = $data->fetchAll(); $num_rows = count($rows);

No hay forma de contar directamente las filas cuando se usa una instrucción SELECT con PDO.