rowCount PDO () Не работающий над PHP 5.2.6 +

Нет реального преимущества использования .php по сравнению с .html для небольших статических веб-страниц. .Html-страница может быть немного быстрее из-за того, что она не отправляется сначала в синтаксический анализатор PHP. Тем не менее, эта скорость будет незначительной, поэтому не стоит упоминать.

Одна из причин, по которой вы можете захотеть использовать файл .php, заключается в том, что вы используете модульный сайт. Например, вам может понадобиться код заголовка в одном файле php, навигация в другом и нижний колонтитул в другом. Таким образом, вы можете использовать php для включения кода из каждого файла вашего модуля и включения его на каждую страницу вашего сайта.

5
задан Andrew G. Johnson 20 April 2009 в 19:27
поделиться

3 ответа

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

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

6
ответ дан 18 December 2019 в 09:10
поделиться

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

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

2
ответ дан 18 December 2019 в 09:10
поделиться

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

Расширение 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 под прикрытием; это единственный способ подсчитать.

10
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: