gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:24:39 25 4
gpt4 key购买 nike

我已经找到了问题的解决方法,但这更多的是关于原因的问题。这是我的场景..

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

$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 数据的较大表上。我也无法在本地复制它,所以我认为这是服务器上的某种配置。这是我正在使用的..

  • Red Hat Enterprise Linux Server release 7.1 (Maipo)
  • 服务器版本:Apache/2.4.6
  • mysql Ver 14.14 Distrib 5.6.25,适用于使用 EditLine 包装器的 Linux (x86_64)
  • PHP 5.4.16(客户端)

欢迎任何想法/想法!!还想知道是否有人也能成功重现这个问题(记得在更大的 table 上测试)。

最佳答案

看来罪魁祸首是 New Relic。我快速禁用了守护程序以查看是否是问题所在并且计数再次完美。

在这里找到我的答案:PHP PDO returning inconsistent results for SELECT FOUND_ROWS()

我决定在开头和结尾用一个空格来包装我的查询(只需要开头)。请注意,“\n”字符也有效。这样我就不必弄乱 New Relic 配置。

感谢 New Relic!

关于PHP PDO SQL_CALC_FOUND_ROWS/FOUND_ROWS() 奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com