如何计算 MySQL 表中的行数(PHP PDO)
Posted
技术标签:
【中文标题】如何计算 MySQL 表中的行数(PHP PDO)【英文标题】:How to count number of rows in MySQL table (PHP PDO) 【发布时间】:2017-12-04 02:22:15 【问题描述】:这是我的代码
$stmt = $conn->prepare("SELECT tmdb_movies.movie_title,tmdb_movies.tmdb_id, count (tmdb_id),GROUP_CONCAT(DISTINCT genres.genres_name) AS genres_name
FROM tmdb_movies
JOIN genres USING (tmdb_id)
GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id
HAVING find_in_set('$category1', genres_name) AND find_in_set('$category2', genres_name)
LIMIT $limit OFFSET $start");
// Then fire it up
$stmt->execute();
// Pick up the result as an array
$result = $stmt->fetchAll();
由于我无法计算同一代码中包含 $category1
和 $category2
的总行数,因此我在其前面添加了此代码。
$sql = "SELECT count(tmdb_id),group_concat(genres.genres_name) AS genres_name
FROM `tmdb_movies`
JOIN genres USING (tmdb_id)
GROUP BY tmdb_movies.tmdb_id
HAVING find_in_set('$category1', genres_name) AND find_in_set('$category2', genres_name) ";
$result = $conn->prepare($sql);
$result->execute();
$totalrows = $result->rowCount();
echo $totalrows;
但是$totalrows
echo 3
在这里。但是它们的行数比 3 多得多。
【问题讨论】:
Find total number of results in mysql query with offset+limit的可能重复 【参考方案1】:您在使用 fetchAll() 执行后覆盖了 $stmt
所以试试这个
$stmt->execute();
$totalrows = $stmt->rowCount();
echo $totalrows;
// Pick up the result as an array
$result = $stmt->fetchAll();
【讨论】:
它与第一行的电影标题相呼应Fatal error: Uncaught Error: Call to undefined method PDOStatement::fetchRow() in
这里的答案是 10,因为 Limit 是 10。
那你想要什么?它将根据限制返回,如果您需要全部从查询中删除限制
我无法移除限制。我想计算数据库中的所有行来制作分页系统。所以我需要再做一个选择语句来无限制地计算这个?【参考方案2】:
尝试 rowCount() 计算行数
$totalrows = $stmt->rowCount();
【讨论】:
这里的答案是 10,因为 Limit 是 10。 更新了我的问题,立即查看【参考方案3】:试试这个
$stmt = $conn->prepare("SELECT SQL_CALC_FOUND_ROWS tmdb_movies.movie_title,tmdb_movies.tmdb_id, count (tmdb_id),GROUP_CONCAT(DISTINCT genres.genres_name) AS genres_name
FROM tmdb_movies
JOIN genres USING (tmdb_id)
GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id
HAVING find_in_set('$category1', genres_name) AND find_in_set('$category2', genres_name)
LIMIT $limit OFFSET $start");
// Then fire it up
$stmt->execute();
// Pick up the result as an array
$result = $stmt->fetchAll();
$conn->prepare('SELECT FOUND_ROWS() as COUNT');
$conn->execute();
$count = $conn->fetchColumn();
echo $count; //here's your total count
【讨论】:
Fatal error: Uncaught Error: Call to undefined method PDOStatement::prepare() in
Fatal error: Uncaught Error: Call to undefined method PDO::execute() in
。在我的代码中 $conn 连接到数据库
您是否在原始声明中添加了SQL_CALC_FOUND_ROWS
?
现在,我做到了...但是Fatal error: Uncaught Error: Call to undefined method PDO::execute()
在第 149 行。这是第 149 行`$conn->execute();`【参考方案4】:
//This is the best answer ever to this questions since mysqli is deprecated
//this is the code to get the total number of rows
$handler = new PDO(DB_HOST, DB_USERNAME, DB_PASSWORD); $stmt = $handler->prepare('SELECT COUNT(*) AS totalRows FROM table_name ');
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$totalRows = $row['totalRows']; ?>
//this prints the total number of rows
echo $totalRows;
【讨论】:
以上是关于如何计算 MySQL 表中的行数(PHP PDO)的主要内容,如果未能解决你的问题,请参考以下文章