Недавно я начал работу над новым проектом с использованием PHP5 и хочу использовать для него свои классы PDO. Проблема заключается в том, что драйвер PDO MySQL не поддерживает rowCount (), поэтому нет возможности запустить запрос, а затем получить количество затронутых строк или возвращенных строк, что является довольно большой проблемой, насколько мне известно. Мне было интересно, если кто-то еще справился с этим раньше и что вы сделали, чтобы обойти это. Чтобы сделать fetch () или fetchAll (), чтобы проверить, были ли какие-либо строки затронуты или возвращены, кажется мне взломанным, я бы просто сделал $ stmt-> numRows () или что-то подобное.
Вы можете выполнить запрос SELECT FOUND_ROWS()
сразу после исходного запроса SELECT
чтобы получить количество строк.
$pdo->query("SELECT * FROM users"); $foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
См. Также: Документы MySQL на FOUND_ROWS ()
Для тех из вас, кто использует хранимые процедуры MySQL, это решение на самом деле невозможно. Я бы предположил, что вы сделаете, чтобы ваша хранимая процедура создала два набора строк. Первый будет содержать одну строку и один столбец, содержащий количество записей. Второй будет набор записей, который вы будете использовать для получения этого количества строк.
Количество неограниченных строк может быть SELECT COUNT(*)
с тем же WHERE
, что и второй набор строк без предложений LIMIT
/ OFFSET
.
Другая идея могла бы заключаться в создании временной таблицы. Используйте SELECT
для заполнения временной таблицы. Затем вы можете использовать SELECT COUNT(*) FROM tmpTable
для первого набора строк и SELECT * FROM tmpTable
для вашей второй.
Этот вопрос основан на нескольких ложных предположениях и одном устаревшем утверждении.
Прежде всего, не путайте количество затронутых и выбранных строк. PDO поддерживал прежний еще в 2009 году.
Говоря о количестве строк, возвращаемых оператором SELECT, вам просто не нужно это число. Имеющихся данных достаточно.
И да, в настоящее время rowCount()
поддерживает количество строк, выбранных из mysql. Но опять же – вам не нужно это число в среднем веб-приложении в любом случае.