Intereting Posts

Обход для PHP5 в PDO rowCount MySQL

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