Обходное решение для PHP5 PDO rowCount MySQL проблема
Вопрос
Недавно я начал работу над новым проектом с использованием PHP5 и хочу использовать для этого свои классы PDO. Проблема в том, что MySQL PDO Driver не поддерживает rowCount (), поэтому нет способа выполнить запрос, а затем получить количество затронутых строк или возвращенных строк, что, на мой взгляд, довольно большая проблема. Мне было интересно, если кто-то еще имел дело с этим раньше и что вы сделали, чтобы обойти это. Необходимость выполнения fetch () или fetchAll () для проверки того, были ли затронуты или возвращены какие-либо строки, кажется мне взломом, я бы просто сделал $ stmt - & Gt; 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 поддерживал первый даже в '09.
Говоря о количестве строк, возвращаемых оператором SELECT - вам просто не нужно это число. У вас достаточно данных.
И да, в настоящее время rowCount()
также поддерживает количество строк, выбранных из mysql. Но опять же - вам не нужно это число в среднем веб-приложении.