web-dev-qa-db-ja.com

MySQLi count(*)は常に1を返します

私はテーブル内の行の数を数えようとしていますが、これはそれを行う正しい方法だと思いました:

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

ただし、カウントは常に(int)1を返します。 phpMyAdminで同じクエリを使用すると、正しい結果が得られます。テーブルにあるので、$count[0]もテストしましたが、NULLを返します。

これを行う正しい方法は何ですか?

35
Lode

その1つのレコードをフェッチする必要があります。これにはCount()の結果が含まれます

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

常に連想フェッチを実行して、複数のケースの結果で必要なものを簡単に取得できるようにします

ここに例があります

$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;クエリの影響を受ける行の数のみを返します。テーブルでcount(*)を実行すると、1行しか返されないため、1以外の結果を得ることができません。

1
Stephane Paquet

これは私にとってうまくいった。

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

私はこの方法をより読みやすくしています:

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

私は配列に対して何かを持っているわけではありません...

0
Mike Causer

そのまさにサンプル。

$query="select count(*)as count from users";
$result=$connection->query($query);
$count=mysqli_fetch_assoc($result)["count"];
echo $count;
0
alex