Masz kilka opcji, jak uzyskać wartość COUNT(*)
z SQL. Najłatwiejsze trzy są prawdopodobnie takie:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['COUNT(*)'];
echo $count;
lub używając aliasu kolumny:
$sql = "SELECT COUNT(*) as cnt FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['cnt'];
echo $count;
lub używając tablicy numerycznej:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_row($result)[0];
echo $count;
Jeśli używasz PHP 8.1, możesz to zrobić jeszcze prościej:
$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();
Nie używaj mysqli_num_rows
aby policzyć rekordy w bazie danych, zgodnie z sugestiami w niektórych miejscach w sieci. Ta funkcja jest bardzo mało przydatna, a liczenie rekordów zdecydowanie do nich nie należy. Korzystanie z mysqli_num_rows
prosiłbyś MySQL o pobranie wszystkiego dopasowywanie rekordów z bazy danych, co może być bardzo zasobochłonne. O wiele lepiej jest delegować zadanie liczenia rekordów do MySQL, a następnie po prostu uzyskać zwróconą wartość w PHP, jak pokazano w mojej odpowiedzi.
Polecam również nauczyć się OOP, dzięki czemu Twój kod będzie czystszy i łatwiejszy do odczytania. To samo z OOP można zrobić w następujący sposób:
$sql = "SELECT COUNT(*) FROM news";
$count = $con->query($sql)->fetch_row()[0];
echo $count;
Jeśli twoje zapytanie używa zmiennych, możesz zrobić podobną rzecz, ale używając przygotowanych instrukcji.
$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;