web-dev-qa-db-fra.com

MySQLi count (*) renvoie toujours 1

J'essaie de compter le nombre de lignes dans un tableau et je pensais que c'était la bonne façon de le faire:

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

Mais les comptes retournent toujours (int)1. Si j'utilise la même requête dans phpMyAdmin, j'obtiens le bon résultat. Il se trouve dans un tableau, j'ai donc essayé de tester $count[0] également, mais cela retourne NULL.

Quel est le bon moyen de le faire?

32
Lode

Vous devez aller chercher cet enregistrement, il contiendra le résultat de Count ()

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

Essayez toujours de faire une extraction associative, de cette façon, vous obtiendrez facilement ce que vous voulez dans plusieurs cas.

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();
6
ErVeY

$ 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 ne renvoie qu'une ligne, vous ne pouvez donc pas obtenir un autre résultat que 1.

1
Stephane Paquet

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";
0
David Sargent

Je trouve ce moyen 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 j'ai rien contre les tableaux ...

0
Mike Causer