我找到了解决问题的方法,但这更像是一个问题。这是我的情景..
我在包含数千条记录的表上使用以下代码:
$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数据的较大表上。我无法在本地重现这一点,所以我认为它是服务器上的某种配置。这就是我正在使用的......
欢迎任何想法/想法!还想知道是否有人可以成功地重现这个问题(记得在更大的桌子上测试它)..