Обходное решение для PHP5 PDO rowCount MySQL проблема - PullRequest
15 голосов
/ 20 января 2009

Я недавно начал работу над новым проектом с использованием PHP5 и хочу использовать для этого свои классы PDO. Проблема в том, что MySQL PDO Driver не поддерживает rowCount (), поэтому нет способа выполнить запрос, а затем получить количество затронутых строк или возвращенных строк, что, на мой взгляд, довольно большая проблема. Мне было интересно, если кто-то еще имел дело с этим раньше и что вы сделали, чтобы обойти это. Необходимость выполнения fetch () или fetchAll () для проверки того, были ли затронуты или возвращены какие-либо строки, кажется мне хаком, я бы просто сделал $ stmt-> numRows () или что-то подобное.

Ответы [ 3 ]

26 голосов
/ 18 марта 2009

Вы можете выполнить запрос SELECT FOUND_ROWS() сразу после исходного запроса SELECT, чтобы получить количество строк.

$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();

См. Также: Документы MySQL на FOUND_ROWS ()

1 голос
/ 27 марта 2010

Для тех из вас, кто использует хранимые процедуры MySQL, это решение на самом деле неосуществимо. Я бы предложил, чтобы ваша хранимая процедура создала два набора строк. Первый будет содержать одну строку и один столбец, содержащий количество записей. Вторым будет набор записей, который вы будете использовать для извлечения этого количества строк.

Число неограниченных строк может быть SELECT COUNT(*) с тем же условием WHERE, что и вторым набором строк без предложений LIMIT / OFFSET.

Другой идеей может быть создание временной таблицы. Используйте оператор SELECT для заполнения временной таблицы. Затем вы можете использовать SELECT COUNT(*) FROM tmpTable для первого набора строк и SELECT * FROM tmpTable для второго.

0 голосов
/ 15 декабря 2013

Этот вопрос основан на нескольких ложных предположениях и одном устаревшем утверждении.

Прежде всего, не путайте количество затронутых и выбранных строк. Первый PDO поддерживал еще в 09 году.

Говоря о количестве строк, возвращаемых оператором SELECT - вам просто не нужно это число. У вас достаточно данных.

И да, в настоящее время rowCount() также поддерживает количество строк, выбранных из mysql. Но опять же - вам не нужно это число в среднем веб-приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...