首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO SQL_CALC_FOUND_ROWS / FOUND_ROWS()奇怪问题

PDO SQL_CALC_FOUND_ROWS / FOUND_ROWS()奇怪问题
EN

Stack Overflow用户
提问于 2017-02-21 19:17:14
回答 1查看 1.8K关注 0票数 4

我已经找到了解决我的问题的方法,但这更多的是一个关于为什么的问题。这是我的场景..。

我在一个包含数千条记录的表上使用了以下代码:

代码语言:javascript
复制
$stmt = $pdo->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM ... LIMIT 10;");
$stmt->execute();
echo $pdo->query("SELECT FOUND_ROWS();")->fetchColumn(); # outputs 0

上面的输出应该输出实际的记录数,而不是输出0。

现在,如果我在SQL_CALC_FOUND_ROWS查询的末尾添加一个尾随空间,它就能正常工作。

代码语言:javascript
复制
... LIMIT 10; ");

你知道为什么会这样吗?

更新

我尝试过在不使用PDO准备的情况下运行查询,而且它似乎也运行得很好。

代码语言:javascript
复制
$stmt = $pdo->query("SELECT SQL_CALC_FOUND_ROWS * FROM ... LIMIT 10;");
echo $pdo->query("SELECT FOUND_ROWS();")->fetchColumn(); # works properly

我还在试着在更小的层次上复制它,这样其他人就可以试一试,看看是否会发生。

更新2

最接近复制此问题的方法是使用以下代码:

代码语言:javascript
复制
# not working..
$stmt = $pdo->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 10");
$stmt->execute();
echo 'COUNT1: ' . $pdo->query("SELECT FOUND_ROWS()")->fetchColumn() . '<br>';

# working (notice the space before SELECT)..
$stmt = $pdo->prepare(" SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 10");
$stmt->execute();
echo 'COUNT2: ' . $pdo->query("SELECT FOUND_ROWS()")->fetchColumn() . '<br>';

# output (from my database)
# COUNT1: 0
# COUNT2: 182020

它只发生在包含至少50 MB数据的较大表上。我也不能在本地复制它,所以我认为这是服务器上的某种配置。这是我用的..。

  • 红帽企业Linux服务器第7.1版(Maipo)
  • 服务器版本: Apache/2.4.6
  • mysql 14.14远端5.6.25,用于Linux (x86_64),使用EditLine包装
  • PHP 5.4.16 (cli)

欢迎任何想法和想法!!还想知道是否有人也能成功地复制这个问题(记得在更大的表上测试它)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 16:43:05

看来罪魁祸首是新文物。我很快就禁用了守护进程,看看这是否是问题所在,而且计数也是完美的。

在这里找到我的答案:ROWS()

我决定在开始和结束时用一个空格包装我的查询(只需要开始)。请注意,"\n“字符也可以工作。这样我就不用搞砸新文物的配置了。

谢谢你的新遗物!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42376049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档