Intereting Posts
Проблема перенаправления формы .htaccess 403 Запрещено, если url содержит каталог с другим файлом htaccess CodeSniffer sniff для генерации графиков зависимостей для PHP-кода? Список библиотек не используется в удаленном соединении PHP DB2 с IBM i Список временных зон США для использования PHP? Просмотры base64 закодированный blob в HTML с PHP MAMP / Symfony: MAMP переопределяет параметр date.timezone от php.ini, Symfony не работает Как получить значение hash (#) в строке запроса Показать стоимость доставки на странице продукта – WooCommerce Woocommerce отключает автоматическое изменение состояния заказа в ожидании-> обработки Как использовать PHP для отправки формы и получения файла с другого сайта? Можно ли остановить включение php-файла? Функция JavaScript не обновляет списки на веб-странице при выпадающем элементе Zend Framwork Session в Internet Explorer Как отправить электронную почту с Phpmailer с подписью DKIM?

PDO rowCount () не работает на PHP 5.2.6+

Таким образом, я использую PHP PDO в качестве своего базового класса goto некоторое время, к сожалению, сегодня после отладки на сервере клиента (с установленным PHP 5.2.6) я это обнаружил. Мы попытались перейти на новейшую стабильную версию (5.2.9), но проблема не устранена.

Кто-нибудь нашел обходное решение?

Единственный способ, которым базы данных могут подсчитать количество строк, – это запустить запрос и подсчитать количество строк.

Расширение mysql по умолчанию использует режим буферизованного запроса, который заставляет весь набор данных извлекаться в память до того, как элемент управления возвращается PHP, и он может начать обрабатывать строки.

PDO использует по умолчанию небуферизованный режим, что приводит к снижению времени ожидания загрузки страницы и, как правило, того, что вы хотите. Компромисс заключается в том, что rowCount () не будет возвращать действительную информацию до тех пор, пока весь набор данных не будет получен.

Итак, как вы получаете этот счет?

Легко:

$q = $db->query("SELECT ..."); $rows = $q->fetchAll(); $rowCount = count($rows); echo "There are $rowCount rows\n"; foreach ($rows as $row) { print_r($row); } 

Но это отстой, потому что он запрашивает все строки вверх и делает загрузку страницы медленнее, у старого расширения mysql не было этой проблемы !?

Но это именно то, что на самом деле делает старое расширение mysql под обложками; это единственный способ получить этот счет.

Вы можете сделать это через MySQL самостоятельно, используя FOUND_ROWS() , не уверен, есть ли какие-то лучшие альтернативы.

Изменить. Кажется, единственная причина, по которой это возможно в MySQL, – это то, что она внутренне извлекала все строки результатов и буферизовала их, чтобы предоставить вам эту информацию. См. mysql_unbuffered_query() . Если вы используете эту функцию вместо mysql_query() , функция mysql_num_rows() не будет работать. Если вам действительно нужно знать количество строк при использовании PDO, вы можете получить все строки из PDO в массив, а затем использовать count() .

Обратите внимание: вы не должны использовать rowCount () для запросов SELECT, поскольку PDOStatement-> rowCount () возвращает количество строк, затронутых последним оператором DELETE, INSERT или UPDATE, выполняемым соответствующим объектом PDOStatement.

Вместо этого вы можете использовать fetchAll () в массив, а затем count ().