我已经找到了解决我的问题的方法,但这更多的是一个关于为什么的问题。这是我的场景..。
我在一个包含数千条记录的表上使用了以下代码:
$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数据的较大表上。我也不能在本地复制它,所以我认为这是服务器上的某种配置。这是我用的..。
欢迎任何想法和想法!!还想知道是否有人也能成功地复制这个问题(记得在更大的表上测试它)。
发布于 2017-02-22 16:43:05
看来罪魁祸首是新文物。我很快就禁用了守护进程,看看这是否是问题所在,而且计数也是完美的。
在这里找到我的答案:ROWS()
我决定在开始和结束时用一个空格包装我的查询(只需要开始)。请注意,"\n“字符也可以工作。这样我就不用搞砸新文物的配置了。
谢谢你的新遗物!
https://stackoverflow.com/questions/42376049
复制相似问题