2010-08-31 21 views
29

que estoy tratando de contar el número de filas de una tabla y pensó que esta era la forma correcta de hacerlo:recuento MySQLi (*) siempre devuelve 1

$result = $db->query("SELECT COUNT(*) FROM `table`;"); 
$count = $result->num_rows; 

Pero siempre devuelve el recuento (int)1. Si utilizo la misma consulta en phpMyAdmin obtengo el resultado correcto. Se sienta en una mesa, así que intenté probar $count[0] también, pero eso devuelve NULL.

¿Cuál es la forma correcta de hacerlo?

+0

puede usar '$ mysqli_result-> num_rows;' See - http://php.net/manual/en/mysqli-result.num-rows.php –

Respuesta

78

Tienes que ir a buscar que un registro, que contendrá el resultado de la cuenta()

$result = $db->query("SELECT COUNT(*) FROM `table`"); 
$row = $result->fetch_row(); 
echo '#: ', $row[0]; 
+0

Gracias! ¿De modo que num_rows solo debería usarse para 'SELECT *' en lugar de 'SELECT COUNT'? – Lode

+2

Más o menos, sí. 'num_rows' puede decirle cuántos registros de resultados _han sido transferidos_ al cliente. Si ese es el número que quieres saber, num_rows es lo que debes usar. Si desea saber cuántos registros hay en la base de datos (sin transferir los datos al cliente) use Count (*). – VolkerK

8

Siempre trate de hacer un asociativa traiga, de esa manera usted puede fácilmente obtener lo que desea en caso dar lugar a múltiples

He aquí un ejemplo

$result = $mysqli->query("SELECT COUNT(*) AS cityCount FROM myCity") 
$row = $result->fetch_assoc(); 
echo $row['cityCount']." rows in table myCity."; 

$result->close(); 
+0

Curioso, ¿qué quiere decir con resultado de caso múltiple? ¿Una selección con múltiples conteos usando declaraciones de casos? –

0

$ result-> num_rows; solo devuelve el número de filas afectadas por una consulta. Cuando se esté realizando un conteo (*) en una mesa que sólo devuelve una fila por lo que no puede tener otro resultado que un 1.

+2

Incorrecto. mysqli_result :: $ num_rows devuelve el recuento de filas de un conjunto de resultados. mysqli :: $ affected_rows devuelve el número de filas afectadas por una consulta. –

1

encuentro de esta manera más legible:

$result = $mysqli->query('select count(*) as `c` from `table`'); 
$count = $result->fetch_object()->c; 
$result->free(); 
$mysqli->close(); 
echo "there are {$count} rows in the table"; 

No es que tenga cualquier cosa contra las matrices ...

1

Esto funcionó bien para mí.

 // Veh Pro Count 
    $query_tvp = "SELECT count(*) as total from submit"; 
    if ($result_tvp = $mysqli->query("$query_tvp")) { 
     /* determine number of rows result set */ 
     $total_tvp = $result_tvp->fetch_row(); 
     $total_tvp = $total_tvp['0']; 
     /* close result set */ 
     $result_tvp->close(); 
    } 

      echo "Total: $total_tvp"; 
Cuestiones relacionadas