2010-08-31 6 views
29

Je suis en train de compter le nombre de lignes d'une table et de la pensée que c'était la bonne façon de le faire:nombre MySQLi (*) retourne toujours 1

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

Mais compte revient toujours (int)1. Si j'utilise la même requête dans phpMyAdmin, j'obtiens le bon résultat. Il se trouve dans une table, donc j'ai essayé de tester aussi $count[0], mais cela renvoie NULL.

Quelle est la bonne façon de procéder?

+0

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

Répondre

78

Vous avez chercher qu'un enregistrement, il contiendra le résultat du comte()

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

Merci! Donc, num_rows seulement devrait être utilisé pour 'SELECT *' au lieu de 'SELECT COUNT'? – Lode

+2

Plus ou moins, oui. 'num_rows' peut vous dire combien d'enregistrements de résultats ont été transférés au client. Si c'est le nombre que vous voulez savoir, num_rows est ce que vous devriez utiliser. Si vous voulez savoir combien d'enregistrements il y a dans la base de données (sans transférer les données au client), utilisez Count (*). – VolkerK

8

Toujours essayer de faire une extraction associative, de cette façon vous pouvez facilement obtenir ce que vous voulez dans plusieurs cas donner

Voici un exemple

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

$result->close(); 
+0

Curieux, que voulez-vous dire par résultat de cas multiples? Un select avec plusieurs comptes utilisant des instructions de cas? –

0

$ result-> num_rows; renvoie uniquement le nombre de lignes affectées par une requête. Lorsque vous effectuez un décompte (*) sur une table, il retourne une seule ligne de sorte que vous ne pouvez pas avoir un autre résultat que 1.

+2

Incorrect. mysqli_result :: $ num_rows renvoie le nombre de lignes d'un ensemble de résultats. mysqli :: $ affected_rows renvoie le nombre de lignes affectées par une requête. –

1

Je trouve cette façon plus lisible:

$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"; 

Non pas que je quoi que ce soit contre les tableaux ...

1

Cela a bien fonctionné pour moi.

 // 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";