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 deSELECT count(*) FROM table
consultas deSELECT count(*) FROM table
ya que tengo demasiadas declaraciones de selección específicas. - Podría ejecutar un
preg_replace
para eliminar todo entreSELECT and FROM
y luego reemplazar con unCOUNT(*)
y ejecutar una segunda consulta, pero esto supone que todas las consultas se configuran de cierta manera. - Podría
fetchAll
primero y luegocount()
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.