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