在PHP项目里,统计数量是最基础也最高频的操作之一。无论是看板上的数字还是分页前的总数,都离不开计数。下面汇总几种主流做法。

一、使用SQL的COUNT统计数据库行数
最直接的方式是在SQL里用COUNT()函数,PHP只负责执行和取结果。下面以mysqli为例。
<?php
$conn = new mysqli('127.0.0.1', 'user', 'pass', 'test');
if ($conn->connect_error) {
die('连接失败: ' . $conn->connect_error);
}
// 统计用户表中状态为1的记录数
$sql = 'SELECT COUNT(*) AS total FROM users WHERE status = 1';
$result = $conn->query($sql);
$row = $result->fetch_assoc();
echo '活跃用户数:' . $row['total'];
$conn->close();
?>
使用PDO的写法
PDO用占位符更安全,适合带参数的统计。
<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('SELECT COUNT(*) FROM orders WHERE user_id = :uid');
$stmt->execute([':uid' => 10]);
$count = $stmt->fetchColumn();
echo '该用户订单数:' . $count;
?>
二、PHP的count函数统计数组元素
如果数据已经查出来放到数组里,可以用PHP内置的count()函数。注意这是PHP函数不是SQL。
<?php $list = [1, 2, 3, 4]; echo count($list); // 输出4 $empty = []; echo count($empty); // 输出0 ?>
多维数组统计
COUNT_RECURSIVE模式可递归统计多维数组所有元素。
<?php $data = ['a' => [1, 2], 'b' => [3, 4, 5]]; echo count($data, COUNT_RECURSIVE); // 输出7 ?>
三、常见误区与建议
- 不要用
SELECT *再在PHP里count,浪费内存和性能。 - 数据库量大时,COUNT(*)比COUNT(字段)更稳妥。
- 数组为空时count返回0,不会报错,可放心用于判断。
| 场景 | 推荐方式 |
|---|---|
| 数据库行数 | SQL COUNT + fetchColumn |
| 已知数组 | PHP count函数 |
统计数量优先交给数据库做,只有在数据已在内存中时才用PHP count。