Du har ett par alternativ för att få värdet på COUNT(*)
från SQL. De enklaste tre är förmodligen detta:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['COUNT(*)'];
echo $count;
eller använda kolumnalias:
$sql = "SELECT COUNT(*) as cnt FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['cnt'];
echo $count;
eller med numerisk array:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_row($result)[0];
echo $count;
Om du använder PHP 8.1 kan du göra det ännu enklare:
$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();
Använd inte mysqli_num_rows
att räkna posterna i databasen som föreslagits på vissa ställen på webben. Den här funktionen har väldigt lite användning, och att räkna poster är definitivt inte en av dem. Använder mysqli_num_rows
du skulle be MySQL att hämta alla matchande poster från databasen, vilket kan vara mycket resurskrävande. Det är mycket bättre att delegera jobbet med att räkna poster till MySQL och sedan bara få det returnerade värdet i PHP som visas i mitt svar.
Jag skulle också rekommendera att lära sig OOP, vilket gör din kod renare och lättare att läsa. Samma sak med OOP kan göras enligt följande:
$sql = "SELECT COUNT(*) FROM news";
$count = $con->query($sql)->fetch_row()[0];
echo $count;
Om din fråga använder variabler, kan du göra en liknande sak, men med hjälp av förberedda satser.
$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;