Du har et par muligheder for at få værdien af COUNT(*)
fra SQL. De tre nemmeste er nok dette:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['COUNT(*)'];
echo $count;
eller ved at bruge kolonnealias:
$sql = "SELECT COUNT(*) as cnt FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['cnt'];
echo $count;
eller ved at bruge numerisk array:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_row($result)[0];
echo $count;
Hvis du bruger PHP 8.1, så kan du gøre det endnu enklere:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_column($result);
echo $count;
// or using OO style
echo $con->query("SELECT COUNT(*) FROM news")->fetch_column();
Brug ikke mysqli_num_rows
at tælle posterne i databasen som foreslået nogle steder på nettet. Denne funktion har meget lidt brug, og at tælle poster er bestemt ikke en af dem. Brug af mysqli_num_rows
du ville bede MySQL om at hente alle matchende poster fra databasen, hvilket kan være meget ressourcekrævende. Det er meget bedre at uddelegere opgaven med at tælle poster til MySQL og så bare få den returnerede værdi i PHP som vist i mit svar.
Jeg vil også anbefale at lære OOP, hvilket gør din kode renere og nemmere at læse. Det samme med OOP kunne gøres som følger:
$sql = "SELECT COUNT(*) FROM news";
$count = $con->query($sql)->fetch_row()[0];
echo $count;
Hvis din forespørgsel bruger variabler, kan du gøre noget lignende, men ved at bruge forberedte udsagn.
$sql = "SELECT COUNT(*) FROM news WHERE category=?";
$stmt = $con->prepare($sql);
$stmt->bind_param('s', $category);
$stmt->execute();
$count = $stmt->get_result()->fetch_row()[0];
echo $count;