PHP PDO SQL_CALC_FOUND_ROWS / FOUND_ROWS()奇怪的问题

时间:2017-02-21 19:17:15

标签: php mysql pdo

我找到了解决问题的方法,但这更像是一个问题。这是我的情景..

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

$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查询的末尾添加一个尾随空格,它可以正常工作..

... LIMIT 10; ");

关于为什么会这样做的任何想法?

更新

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

$stmt = $pdo->query("SELECT SQL_CALC_FOUND_ROWS * FROM ... LIMIT 10;");
echo $pdo->query("SELECT FOUND_ROWS();")->fetchColumn(); # works properly

我仍然试图在较小的水平上重现这一点,以便其他人可以试一试,看看是否会发生。

更新2

最接近我可以使用以下代码:

# 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 Ver 14.14 Distrib 5.6.25,for Linux(x86_64)using EditLine wrapper
  • PHP 5.4.16(cli)

欢迎任何想法/想法!还想知道是否有人可以成功地重现这个问题(记得在更大的桌子上测试它)..

0 个答案:

没有答案