Мы используем разъем PDO в среде продукта, и недавно мы столкнулись с новой проблемой. Каким-то образом mysql FOUND_ROWS () возвращает 0
Я также пытался запустить SQL-запросы вручную в консоли MySQL, но FOUND_ROWS () возвращает правильный счет в консоли.
Что я нашел: PDO сломан, mysqli работает
Тестовый код:
<?php
$db = new PDO('mysql:host=dbhost;dbname=projectname;charset=utf8', 'projectname', '***');
print_r($db->query("SELECT SQL_CALC_FOUND_ROWS `id_sales_order` FROM `sales_order` WHERE RAND() > 0.8 LIMIT 0, 1")->fetchAll(PDO::FETCH_ASSOC));
print_r($db->query("SELECT FOUND_ROWS()")->fetchAll(PDO::FETCH_ASSOC));
$mysqli = new mysqli("dbhost", "projectname", "***", "projectname");
print_r($mysqli->query("SELECT SQL_CALC_FOUND_ROWS `id_sales_order` FROM `sales_order` WHERE RAND() > 0.8 LIMIT 0, 1")->fetch_assoc());
print_r($mysqli->query("SELECT FOUND_ROWS()")->fetch_assoc());
Результаты:
Array
(
[0] => Array
(
[id_sales_order] => 13
)
)
Array
(
[0] => Array
(
[FOUND_ROWS()] => 0
)
)
Array
(
[id_sales_order] => 7
)
Array
(
[FOUND_ROWS()] => 670336
)
Версии:
Mysql Server version: 5.6.21-70.0-log Percona Server (GPL), Release 70.0, Revision 688
PHP 5.4.33 (cli) (built: Sep 20 2014 16:20:03)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
MysqlI Support => enabled
Client API library version => mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $
У меня была такая же проблема, прежде чем, однако, я исправил ее с помощью fetch (PDO :: FETCH_COLUMN).
print_r($conn->query("SELECT FOUND_ROWS()")->fetch(PDO::FETCH_COLUMN));
Других решений пока нет …