【问题标题】:FOUND_ROWS() keeps returning 0FOUND_ROWS() 不断返回 0
【发布时间】:2010-11-04 11:30:07
【问题描述】:
$result = $db_con->query("SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 0,10");

$count_result = $db_con->query("SELECT FOUND_ROWS() as totalcount");
$row = $count_result->fetch_assoc();
$total = $row['totalcount'];

$total 始终返回 0,即使 $result 包含其中的所有用户行。

ini_set("mysql.trace_mode", "0");

我通过在此处搜索类似的 Q 发现了此设置,但它并没有解决我的问题。

当我在我的 MySQL 客户端中使用 2 个 select 语句时,它总是输出正确的计数。只是似乎无法弄清楚如何让它在我的 php 页面上运行。

PHP 版本:5.2.5 build 6 MySQL 版本:5.1.30

注意:我在此处提供的代码并未用于我的实际项目,但是,它确实说明了我无法检索总计数的问题。这段代码,从我读过的关于 found_rows() 的内容来看,应该可以工作,但它不能。

【问题讨论】:

  • @Seth : 你尝试添加 LIMIT 子句了吗?
  • ini_set("mysql.trace_mode", "0");解决我的问题。感谢您的提问:)

标签: php select count


【解决方案1】:

在 php.net 上,我发现有人可能有同样的问题。他说的是可能发生的竞争条件:php.net。基本上,他通过以减慢速度为代价临时锁定表来解决这个问题。

【讨论】:

  • 我在谷歌搜索时发现了那个帖子。我想我会回到使用 count(*)。
【解决方案2】:

需要LIMIT 才能使found_rows() 正常工作

在查询末尾添加 LIMIT,即。

SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 0,10;

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

FOUND_ROWS() -- 对于带有 LIMIT 子句的 SELECT,如果没有 LIMIT 子句,将返回的行数

【讨论】:

  • 即使有限制条款,我也得到 0 的总数。
【解决方案3】:

我不确定您使用的是什么数据库库,但看起来您正在尝试从 mysql 数据库中计算 php 中的 select 语句中的行数。

你有没有试过看看它是否适用于 php 中内置的 mysql 数据库函数?

$count_result = mysql_query("SELECT COUNT(*) as totalcount FROM users");
$row = mysql_fetch_array($count_result);

$total = $row['totalcount'];

【讨论】:

  • -1 : 不回答关于 LIMIT 和 FOUND_ROWS() 的原始问题
猜你喜欢
  • 1970-01-01
  • 2016-03-09
  • 2023-03-28
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多