MySQL/PDO FOUND_ROWS()有时会错误地返回0

Ben*_*rth 10 php mysql pdo sql-calc-found-rows laravel-4

我们有一个laravel 4.1应用程序,曾经在PHP 5.4下运行,但是自从升级到5.6.13(今天到5.6.14)后,我注意到查询已经开始有时返回0 FOUND_ROWS().在我们的一些查询中,它似乎是间歇性的,但在其他问题上,它更像是一个永久性的问题.

受影响最大的集合是具有子查询的集合.

我们正在使用PDO(我们没有使用laravel模型,只是直接与其PDO对象进行交互).MySQL在这个时间框架内也没有被修改过.

尝试了所有种类 - 一个建议是将跟踪模式设置为0,但这并没有帮助.我尝试设置PDO::MYSQL_ATTR_USE_BUFFERED_QUERY为false,但是当您尝试选择时会导致PDO错误FOUND_ROWS()(现在无法获得确切的消息).

没有回到5.4(请上帝没有),我完全卡住了......

直接在MySQL中运行这些查询,然后运行FOUND_ROWS() 始终返回正确的结果.

Som*_*luk 5

New Relic有问题

New Relic Application有一些问题.NewRelic应用程序监控守护进程或扩展正在干扰结果FOUND_ROWS()

目前的解决方法是=>

newrelic.transaction_tracer.explain_enabled = false
Run Code Online (Sandbox Code Playgroud)

如何使用FOUND_ROWS

目前尚不清楚你的sql PDO查询是什么.还在尝试使用FOUND_ROWS()PDO.检查您是否使用相同的方式或请提供您正在尝试的一些查询.

$db = new PDO(DSN...); 
$db->setAttribute(array(PDO::MYSQL_USE_BUFFERED_QUERY=>FALSE)); 
$rs  = $db->query('SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT 5,15'); 
$rs1 = $db->query('SELECT FOUND_ROWS()'); 
$rowCount = (int) $rs1->fetchColumn();  
Run Code Online (Sandbox Code Playgroud)


Ben*_*rth 0

好吧,事实证明这是由于 New Relic PHP 插件造成的。禁用此功能立即修复了所有FOUND_ROWS()返回零的查询的问题。