Обход для 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. Но опять же - вам не нужно это число в среднем веб-приложении в любом случае.