2010-08-31 7 views
29

Ich versuche, die Anzahl der Zeilen in einer Tabelle zu zählen, und dachte, dass dies der richtige Weg war, das zu tun:MySQLi count (*) gibt immer 1

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

Aber zählen kehrt immer (int)1. Wenn ich dieselbe Abfrage in phpMyAdmin verwende, bekomme ich das richtige Ergebnis. Es sitzt in einer Tabelle, also habe ich versucht, auch $count[0] zu testen, aber das gibt NULL zurück.

Was ist der richtige Weg?

+0

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

Antwort

78

Sie haben zu holen, dass ein Datensatz, wird es das Ergebnis der Zählung enthalten()

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

Dank! Also num_rows sollte nur für 'SELECT *' anstelle von 'SELECT COUNT' verwendet werden? – Lode

+2

Mehr oder weniger, ja. 'num_rows' kann Ihnen sagen, wie viele Ergebnisdatensätze_ auf den Client übertragen wurden. Wenn das die Zahl ist, die du wissen willst, num_rows ist das, was du benutzen solltest. Wenn Sie wissen möchten, wie viele Datensätze in der Datenbank vorhanden sind (ohne die Daten an den Client zu übertragen), verwenden Sie Count (*). – VolkerK

8

Immer versuchen, ein assoziatives zu holen, so zu tun, können Sie einfach, was Sie in mehreren Fall dazu führen, wollen

Hier ist ein Beispiel

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

$result->close(); 
+0

Neugierig was meinst du mit multiplen Case Resultaten? Eine Auswahl mit mehreren Zählungen mithilfe von Fallanweisungen? –

0

$ result-> num_rows; gibt nur die Anzahl der Zeilen zurück, die von einer Abfrage betroffen sind. Wenn Sie eine count (*) auf einem Tisch Durchführung gibt es nur eine Zeile, so dass Sie nicht ein anderes Ergebnis haben können als 1.

+2

Falsch. mysqli_result :: $ num_rows gibt die Zeilenanzahl einer Ergebnismenge zurück. mysqli :: $ affected_rows gibt die Anzahl der Zeilen zurück, die von einer Abfrage betroffen sind. –

1

ich auf diese Weise besser lesbar finden:

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

Nicht, dass ich alles gegen Arrays ...

1

Das funktionierte gut für mich.

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