Bạn có một số tùy chọn về cách nhận giá trị của COUNT(*)
từ SQL. Ba cách dễ nhất có lẽ là:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['COUNT(*)'];
echo $count;
hoặc sử dụng bí danh cột:
$sql = "SELECT COUNT(*) as cnt FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_assoc($result)['cnt'];
echo $count;
hoặc sử dụng mảng số:
$sql = "SELECT COUNT(*) FROM news";
$result = mysqli_query($con, $sql);
$count = mysqli_fetch_row($result)[0];
echo $count;
Nếu bạn đang sử dụng PHP 8.1, thì bạn có thể làm điều đó thậm chí còn đơn giản hơn:
$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();
Không sử dụng mysqli_num_rows
để đếm các bản ghi trong cơ sở dữ liệu như được đề xuất ở một số nơi trên web. Chức năng này có rất ít công dụng và việc đếm các bản ghi chắc chắn không phải là một trong số chúng. Sử dụng mysqli_num_rows
bạn sẽ yêu cầu MySQL truy xuất tất cả khớp các bản ghi từ cơ sở dữ liệu, có thể rất tốn tài nguyên. Sẽ tốt hơn nhiều nếu bạn ủy thác công việc đếm các bản ghi cho MySQL và sau đó chỉ lấy giá trị trả về trong PHP như trong câu trả lời của tôi.
Tôi cũng khuyên bạn nên học OOP, điều này giúp mã của bạn sạch hơn và dễ đọc hơn. Tương tự với OOP có thể được thực hiện như sau:
$sql = "SELECT COUNT(*) FROM news";
$count = $con->query($sql)->fetch_row()[0];
echo $count;
Nếu truy vấn của bạn sử dụng các biến, thì bạn có thể làm điều tương tự, nhưng bằng cách sử dụng các câu lệnh đã chuẩn bị.
$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;